为什么连测试数据都没过,输出7?
查看原帖
为什么连测试数据都没过,输出7?
481471
Eric12楼主2022/8/30 17:44
#include <iostream>
#include <queue>
using namespace std;
struct node{
	int posx,posy,step;
	char face;
};
int n,m,a[55][55],startx,starty,endx,endy;
bool vis[55][55],visface[55][55]['w'+1];
char somepeoplehavenofaces;
void bfs()
{
	queue<node> q;
	q.push({startx,starty,0,somepeoplehavenofaces});
	while(!q.empty())
	{
		node x=q.front();
		cout<<x.posx<<' '<<x.posy<<' '<<x.step<<' '<<x.face<<endl;
		if(x.posx==endx&&x.posy==endy)
		{
			cout<<x.step<<endl;
			return;
		}
		switch(x.face)
		{
			case 'N':if(x.posx-1>=1&&!vis[x.posx-1][x.posy])
						{vis[x.posx-1][x.posy]=true; q.push({x.posx-1,x.posy,x.step+1,x.face});}
					if(x.posx-2>=1&&!vis[x.posx-2][x.posy])
						{vis[x.posx-2][x.posy]=true; q.push({x.posx-2,x.posy,x.step+1,x.face});}
					if(x.posx-3>=1&&!vis[x.posx-3][x.posy])
						{vis[x.posx-3][x.posy]=true; q.push({x.posx-3,x.posy,x.step+1,x.face});}
					break;
			case 'S':if(x.posx+1<=n&&!vis[x.posx+1][x.posy])
						{vis[x.posx+1][x.posy]=true; q.push({x.posx+1,x.posy,x.step+1,x.face});};
					if(x.posx+2<=n&&!vis[x.posx+2][x.posy])
						{vis[x.posx+2][x.posy]=true; q.push({x.posx+2,x.posy,x.step+1,x.face});};
					if(x.posx+3<=n&&!vis[x.posx+3][x.posy])
						{vis[x.posx+3][x.posy]=true; q.push({x.posx+3,x.posy,x.step+1,x.face});};
					break;
			case 'W':if(x.posy-1>=1&&!vis[x.posx][x.posy-1])
						{vis[x.posx][x.posy-1]=true; q.push({x.posx,x.posy-1,x.step+1,x.face});};
					if(x.posy-2>=1&&!vis[x.posx][x.posy-2])
						{vis[x.posx][x.posy-2]=true; q.push({x.posx,x.posy-2,x.step+1,x.face});};
					if(x.posy-3>=1&&!vis[x.posx][x.posy-3])
						{vis[x.posx][x.posy-3]=true; q.push({x.posx,x.posy-3,x.step+1,x.face});};
					break;
			case 'E':if(x.posy+1<=m&&!vis[x.posx][x.posy+1])
						{vis[x.posx][x.posy+1]=true; q.push({x.posx,x.posy+1,x.step+1,x.face});};
					if(x.posy+2<=m&&!vis[x.posx][x.posy+2])
						{vis[x.posx][x.posy+2]=true; q.push({x.posx,x.posy+2,x.step+1,x.face});};
					if(x.posy+3<=m&&!vis[x.posx][x.posy+3])
						{vis[x.posx][x.posy+3]=true; q.push({x.posx,x.posy+3,x.step+1,x.face});};
					break;
		}
		char f;
		switch(x.face)
		{
			case 'N':f='W';break;
			case 'W':f='S';break;
			case 'S':f='E';break;
			case 'E':f='N';break;
		}
		if(!visface[x.posx][x.posy][f])
		{
			visface[x.posx][x.posy][f]=true;
			q.push({x.posx,x.posy,x.step+1,f});
		}
		switch(x.face)
		{
			case 'N':f='E';break;
			case 'E':f='S';break;
			case 'S':f='W';break;
			case 'W':f='N';break;
		}
		if(!visface[x.posx][x.posy][f])
		{
			visface[x.posx][x.posy][f]=true;
			q.push({x.posx,x.posy,x.step+1,f});
		}
		q.pop();
	}
	cout<<-1<<endl;
}
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]) vis[i][j]=1;
		}
	cin>>startx>>starty>>endx>>endy>>somepeoplehavenofaces;
	vis[startx][starty]=true;
	bfs();
	return 0;
}
2022/8/30 17:44
加载中...