#include <bits/stdc++.h>
using namespace std;
char cp[12][12];
bool fxh[121][121][4];
bool cxh[121][121][4];
int main()
{
//0 up
//1 right
//2 down
//3 left
for(int i=0;i<=11;i++)
for(int j=0;j<=11;j++)
cp[i][j]='0';
int x,y,m,n,ffx=0,cfx=0;
for(int i=1;i<=10;i++)
{
for(int j=1;j<=10;j++)
{
cin>>cp[i][j];
if(cp[i][j]=='F')
{
x=i;y=j;
fxh[x][y][0]==1;
}
if(cp[i][j]=='C')
{
m=i;n=j;
cxh[x][y][0]==1;
}
}
}
long long i=1;
for(;;i++)
{
switch (ffx)
{
case 0:
if(cp[x-1][y]!='0'&&cp[x-1][y]!='*')
x--;
else ffx=(ffx+1)%4;
break;
case 1:
if(cp[x][y+1]!='0'&&cp[x][y+1]!='*')
y++;
else ffx=(ffx+1)%4;
break;
case 2:
if(cp[x+1][y]!='0'&&cp[x+1][y]!='*')
x++;
else ffx=(ffx+1)%4;
break;
case 3:
if(cp[x][y-1]!='0'&&cp[x][y-1]!='*')
y--;
else ffx=(ffx+1)%4;
break;
}
switch (cfx)
{
case 0:
if(cp[m-1][m]!='0'&&cp[m-1][n]!='*')
m--;
else cfx=(cfx+1)%4;
break;
case 1:
if(cp[m][n+1]!='0'&&cp[m][n+1]!='*')
n++;
else cfx=(cfx+1)%4;
break;
case 2:
if(cp[m+1][n]!='0'&&cp[m+1][n]!='*')
m++;
else cfx=(cfx+1)%4;
break;
case 3:
if(cp[m][n-1]!='0'&&cp[m][n-1]!='*')
n--;
else cfx=(cfx+1)%4;
break;
}
if(x==m&&y==n)
{
cout<<i;
return 0;
}
if(cxh[m][n][cfx]==1&&fxh[x][y][ffx]==1)
{
cout<<"0";
return 0;
}
cxh[m][n][cfx]=1;
fxh[x][y][ffx]=1;
}
cout<<"0";
return 0;
}
求助各位大佬!
为什么我这判断是否无限循环的方法是错的?
首先我定义了两个bool型三维数组,用来标记某个位置的人(或者牛)的某个朝向是否已经出现过,如果某次人和牛的位置朝向都已经在某一次出现过,那么就进入了无限循环,判定为不能相遇。
(后来我直接定义一个100000的最大值水过了这道题,但还是对我自己的这种做法有些疑问