题解
模拟即可。注意怎样判断不会相遇,我比较暴力直接确定一个大一点的时间超过了就break,
当然不会相遇肯定是进入了一个环,可以借此判断。
Code
// head files excluded
using namespace std;
int n,m;
int cot[11][11];
int Mx[4]={-1,0,1,0};
int My[4]={0,1,0,-1};
int main(void){
freopen("ttwo.out","w",stdout);
freopen("ttwo.in","r",stdin);
char c;
int fx,fy,cx,cy;
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++){
cin>>c;
if(c=='*') cot[i][j]=1;
if(c=='F'){
fx = i;
fy = j;
}
if(c=='C'){
cx = i;
cy = j;
}
}
int time,fd,cd;// direction
time=fd=cd=0;
int tmpx,tmpy;
while( fx!=cx || fy!=cy ){
tmpx = fx+Mx[fd];
tmpy = fy+My[fd];
if( tmpx>0 && tmpx<11 &&
tmpy>0 && tmpy<11 &&
cot[tmpx][tmpy]!=1 ){
fx = tmpx;
fy = tmpy;
}else {
fd++;
fd%=4;
}
tmpx = cx+Mx[cd];
tmpy = cy+My[cd];
if( tmpx>0 && tmpx<11 &&
tmpy>0 && tmpy<11 &&
cot[tmpx][tmpy]!=1 ){
cx = tmpx;
cy = tmpy;
}else {
cd++;
cd%=4;
}
time++;
if(time>5000) break;
}
if(time>5000) cout<<0<<endl;
else cout<<time<<endl;
return 0;
}