help!
查看原帖
help!
389540
imfkwk楼主2020/10/9 20:20
#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的最大值水过了这道题,但还是对我自己的这种做法有些疑问

2020/10/9 20:20
加载中...