大佬们哪错了?
查看原帖
大佬们哪错了?
515274
AC_Boy楼主2023/4/23 14:45
#include<bits/stdc++.h>
using namespace std;
int n,m,ax,ay,bx,by;
bool mp[51][51];
bool ok=1;
bool vis[51][51][10];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
char cx;
struct Node{
	int x,y,st,fx;
};
queue<Node> q;
void bfs(){
	int f;
	if(cx=='E')f=1;
	if(cx=='S')f=2;
	if(cx=='W')f=3;
	if(cx=='N')f=4;
	//东E1,南S2,西W3,北N4
	q.push({ax,ay,0,f});
	while(!q.empty()){
		Node fr=q.front();
		if(fr.x==bx and fr.y==by){
			cout<<fr.st<<endl;
			ok=0;
			return ;
		}
		for(int k=0;k<4;k++){
			int nx=fr.x+dx[k],ny=fr.y+dy[k];
			if(nx>0 and ny>0 and nx<=n and ny<=m and !vis[nx][ny][fr.fx] and !mp[nx][ny]){
				vis[nx][ny][fr.fx]=1;
				q.push({nx,ny,fr.st+1,fr.fx});
			}
			nx=fr.x+dx[k]*2,ny=fr.y+dy[k]*2;
			if(nx>0 and ny>0 and nx<=n and ny<=m and !vis[nx][ny][fr.fx] and !mp[nx][ny]){
				vis[nx][ny][fr.fx]=1;
				q.push({nx,ny,fr.st+1,fr.fx});
			}
			nx=fr.x+dx[k]*3,ny=fr.y+dy[k]*3;
			if(nx>0 and ny>0 and nx<=n and ny<=m and !vis[nx][ny][fr.fx] and !mp[nx][ny]){
				vis[nx][ny][fr.fx]=1;
				q.push({nx,ny,fr.st+1,fr.fx});
			}
		}
		f=fr.fx+1;
		if(f==5)f=1;
		if(!vis[fr.x][fr.y][f]){
			vis[fr.x][fr.y][f]=1;
			q.push({fr.x,fr.y,fr.st+1,f});
		}
		f=fr.fx-1;
		if(f==0)f=4;
		if(!vis[fr.x][fr.y][f]){
			vis[fr.x][fr.y][f]=1;
			q.push({fr.x,fr.y,fr.st+1,f});
		}
		q.pop();
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
		}
	}
	cin>>ax>>ay>>bx>>by>>cx;
	bfs();
	if(ok==1){
		cout<<-1<<endl;
	}
	return 0;
}
2023/4/23 14:45
加载中...