#3WA了,不知道为什么
查看原帖
#3WA了,不知道为什么
585805
MCRS_lizi楼主2022/1/3 12:22

如果把cout<<-1<<endl;改成cout<<8<<endl;就可以了,但我想知道为什么,求救QAQ

#include<bits/stdc++.h>
using namespace std;
int n,m,xf,yf,d[20]={1,2,4,8,16,32,64,128,256,512,-1,-2,-4,-8,-16,-32,-64,-128,-256,-512};
char a[1010][1010];
bool used[1010][1010];
struct sb
{
	int x,y,ce;
}s,q[10000001];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='#')
			{
				xf=i;
				yf=j;
			}
		}
	}
	int maxx=9;
	int f=0,e=1;
	s.x=1;
	s.y=1;
	s.ce=0;
	q[++f]=s;
	used[1][1]=1;
	while(f>=e)
	{
		sb u=q[e++];
		for(int j=0;j<=19;j++)
		{
			sb v=u;
			bool flag=0;
			v.x+=d[j];
			v.ce++;
			if(v.x<1||v.y<1||v.x>n||v.y>m)
			{
				continue;
			}
			if(used[v.x][v.y])
			{
				continue;
			}
			for(int k=u.x;k!=v.x;k+=d[j]/abs(d[j]))
			{
				if(a[k][v.y]=='X')
				{
					flag=1;
					break;
				}
			}
			if(flag)
			{
				continue;
			}
			if(v.x==xf&&v.y==yf)
			{
				cout<<v.ce<<endl;
				return 0;
			}
			q[++f]=v;
			used[v.x][v.y]=1;
		}
		for(int j=0;j<=19;j++)
		{
			sb v=u;
			bool flag=0;
			v.y+=d[j];
			v.ce++;
			if(v.x<1||v.y<1||v.x>n||v.y>m)
			{
				continue;
			}
			if(used[v.x][v.y])
			{
				continue;
			}
			for(int k=u.y;k!=v.y;k+=d[j]/abs(d[j]))
			{
				if(a[v.x][k]=='X')
				{
					flag=1;
					break;
				}
			}
			if(flag)
			{
				continue;
			}
			if(v.x==xf&&v.y==yf)
			{
				cout<<v.ce<<endl;
				return 0;
			}
			q[++f]=v;
			used[v.x][v.y]=1;
		}
	}
	cout<<-1<<endl;
	return 0;
} 
2022/1/3 12:22
加载中...