#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int dirx[4] = { -1, 0, 1, 0};
int diry[4] = { 0, 1 ,0, -1};
int c[2],f[2];//C与F的坐标储存
char mmap[10+10][10+10],visc[10+10][10+10],visf[10+10][10+10];//地图和C,F的死循环标记数组
int main() {
queue<char> walk;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++){
cin >>mmap[i][j];
if( mmap[i][j]=='C'){
c[0]=i;
c[1]=j;
}
else if (mmap[i][j]=='F'){
f[0]=i;
f[1]=j;
}
}
for(int i=0;i<10;i++)
for(int j=0;j<10;j++){
visc[i][j]=-1;
visf[i][j]=-1;
}
walk.push('C');
walk.push('F');
int cd=0,fd=0,cnt=0;
while ( walk.front() && cnt<=100 ){
if( walk.front()=='C'){
if( mmap[c[0]+dirx[cd]][c[1]+diry[cd]] !='*' && 0<=c[0]+dirx[cd] &&c[0]+dirx[cd]<10 && 0<=c[1]+diry[cd]&&c[1]+diry[cd]<10 ){
c[0]+=dirx[cd];
c[1]+=diry[cd];
}
else {
cd++;
cd%=4;
}
//judge loop C
if( visc[c[0]][c[1]] == cd ){
printf("C:%d %d dir:%d\n",c[0],c[1], visc[c[0]][c[1]]);
cnt=0;
break;
}
else if( visc[c[0]][c[1]]==-1 )
printf("%d\n",visc[c[0]][c[1]]);
visc[c[0]][c[1]]=cd;
walk.push('C');
}
else if( walk.front()=='F' ){
if( mmap[f[0]+dirx[fd]][f[1]+diry[fd]] !='*' && 0<=f[0]+dirx[fd]&&f[0]+dirx[fd]<10 && 0<=f[1]+diry[fd]&&f[1]+diry[fd]<10 ){
f[0]+=dirx[fd];
f[1]+=diry[fd];
}
else {
fd++;
fd%=4;
}
//judge loop F
if( visf[f[0]][f[1]]== fd ){
cnt=0;
break;
}
else if( visf[f[0]][f[1]]==-1 )
visf[f[0]][f[1]]=fd;
walk.push('F');
cnt++;
}
walk.pop();
if( c[0]==f[0] && c[1]==f[1] )
break;
}
printf("%d\n",cnt);
return 0;
}
运行样例是41