注释已写~
#include<bits/stdc++.h>
using namespace std;
struct object{
int x,y;
int dr;//direction方向,0123北东南西
}f,c;//f农夫,c奶牛
int m[15][15]={0},t=0;//将char地图int化便于判断和直接设定边界,即障碍物全为0,空地全为1
int dx[4]={-1,0,1,0};//北东南西;
int dy[4]={0,1,0,-1};//北东南西
void turn(){
int fx=f.x+dx[f.dr];
int cx=c.x+dx[c.dr];
int fy=f.y+dy[f.dr];
int cy=f.y+dy[c.dr];
if(m[fx][fy]!=0){
f.x=fx; f.y=fy;
}//前方不是障碍就移动
else
{
f.dr=(f.dr+1)%4;//0123方向循环
}//前方是障碍就变方向
if(m[cx][cy]!=0){
c.x=cx; c.y=cy;
}//前方不是障碍就移动
else
{
c.dr=(c.dr+1)%4;//0123方向循环
}//前方是障碍就变方向
}
int main(){
bool mark[11][11][4][11][11][4]={0};//判断数组,分别储存f和c的信息,进行记忆
char dt;//读入地图字符
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++){
cin>>dt;
if(dt=='*') m[i][j]=0;//是障碍物就清零
else m[i][j]=1;
if(dt=='C')
{
c.x=i; c.y=j; c.dr=0;
}
if(dt=='F')
{
f.x=i; f.y=j; f.dr=0;//方向都为北
}
}//读入
while(f.x!=c.x && c.x!=c.y){
t++;
if(mark[f.x][f.y][f.dr][c.x][c.y][c.dr]){
cout<<0; return 0;//原来走过了,就判断为死循环结束程序
}
mark[f.x][f.y][f.dr][c.x][c.y][c.dr]=1;
turn();
}
cout<<t;
return 0;
}