注意最大的时间,如果盲目开大一点,只会超时,所以要掐地刚刚好,每个格子对于每个人最多有4次到达机会,分别为方向不同时的四个。总共有100个格子,对于每个人就是400次,对于两个人,就是400*400=160000,把握范围味就行了。
#include<iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int map[12][12],kk=0;
struct didian{int x;int y;int fang;};
didian niu,ren;
void aaa(void);
int main()
{
freopen("ttwo.in","r",stdin);
freopen("ttwo.out","w",stdout);
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++){
char ch;
cin>>ch;
if(ch=='.'){map[i][j]=1;}
else if(ch=='F'){ren.x=i;ren.y=j;map[i][j]=1;}
else if(ch=='C'){niu.x=i;niu.y=j;map[i][j]=1;}
}
while(kk<=160000){
if(niu.fang==0)
{
if(map[niu.x-1][niu.y]==1)niu.x--;
else niu.fang++;
}
else if(niu.fang==1)
{
if(map[niu.x][niu.y+1]==1)niu.y++;
else niu.fang++;
}
else if(niu.fang==2)
{
if(map[niu.x+1][niu.y]==1)niu.x++;
else niu.fang++;
}
else if(niu.fang==3)
{
if(map[niu.x][niu.y-1]==1)niu.y--;
else niu.fang=0;
}
if(ren.fang==0)
{
if(map[ren.x-1][ren.y]==1)ren.x--;
else ren.fang++;
}
else if(ren.fang==1)
{
if(map[ren.x][ren.y+1]==1)ren.y++;
else ren.fang++;
}
else if(ren.fang==2)
{
if(map[ren.x+1][ren.y]==1)ren.x++;
else ren.fang++;
}
else if(ren.fang==3)
{
if(map[ren.x][ren.y-1]==1)ren.y--;
else ren.fang=0;
}
kk++;
if(niu.x==ren.x&&niu.y==ren.y){cout<<kk<<endl;return 0;}
}
cout<<0<<endl;
return 0;
}