30分求助dalao们
查看原帖
30分求助dalao们
662037
_Jonny_404楼主2022/10/27 16:15
#include<bits/stdc++.h>
using namespace std;

int n,m;
int a[55][55];
int step[55][55];
bool f[55][55][28];
int sx,sy,fx,fy;
char sd;
struct thr
{
	int first;
	int second;
	char de;
};
thr make_thr(int a,int b,char c)
{
	thr x={a,b,c};
	return x;
}
queue<thr>q;
void cz3(int&x,int&y,char&d){
	if(d=='E')
		d='N';
	if(d=='S')
		d='E';
	if(d=='W')
		d='S';
	if(d=='N')
		d='W';
}/*向左转*/
void cz4(int&x,int&y,char&d){
	if(d=='E')
		d='S';
	else if(d=='S')
		d='W';
	else if(d=='W')
		d='N';
	else if(d=='N')
		d='E';
}/*向右转*/
void cz0(int&x,int&y,char&d)    
{
	if(d=='E')
		y++;
	else if(d=='S')
		x++;
	else if(d=='W')
		y--;
	else if(d=='N')
		x--;
}/*向前一步*/
void cz1(int&x,int&y,char&d){
	if(d=='E')
		y+=2;
	if(d=='S')
		x+=2;
	if(d=='W')
		y-=2;
	if(d=='N')
		x-=2;
}/*向前两步*/
void cz2(int&x,int&y,char&d){
	if(d=='E')
		y+=3;
	if(d=='S')
		x+=3;
	if(d=='W')
		y-=3;
	if(d=='N')
		x-=3;
}/*向前三步*/

void bfs()
{
	q.push(make_thr(sx,sy,sd));
	f[sx][sy][(sd-'A')]=1;
	step[sx][sy]=0;
	while(!q.empty())
	{
		int x=q.front().first;
		int y=q.front().second;
		int d=q.front().de;
		q.pop();
		for(int i=0;i<=4;i++)
		{
			int xx=x;
			int yy=y;
			char dd=d;
			switch(i)
			{
				case 0:
					cz3(xx,yy,dd);
					break;//向左转 
				case 1:
					cz4(xx,yy,dd);
					break;//向右转 
				case 2:
					cz0(xx,yy,dd);
					break;//前进一步 
				case 3:
					cz1(xx,yy,dd);
					break;//前进两步 
				case 4:
					cz2(xx,yy,dd);
					break;//前进三步 
			}
			if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&f[xx][yy][(dd-'A')]==0)
			{
				if(a[xx][yy]==1)
					break;
				q.push(make_thr(xx,yy,dd));
				f[xx][yy][(dd-'A')]=1;
				step[xx][yy]=step[x][y]+1;
				if(xx==fx&&yy==fy)
					return;
			}
		}
	}
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]),
			step[i][j]=-1;
	scanf("%d%d%d%d%c",&sx,&sy,&fx,&fy,&sd);
	if(sx==fx&&sy==fy)
	{
	    printf("0");
	    return 0;
	}
	bfs();
	printf("%d",step[fx][fy]);
	return 0;
}

原代码提交的 3030 分记录

2022/10/27 16:15
加载中...