大佬们求助 bfs看看还有什么疏漏的地方
查看原帖
大佬们求助 bfs看看还有什么疏漏的地方
590571
_weishiqi66_楼主2023/3/29 13:39

评测记录

#include<bits/stdc++.h>
using namespace std;
const int fx[]={0,-1,1,0,0};//N W S E
const int fy[]={0,0,0,-1,1};

struct uc{
	int x,y;
	int t,l;
};
int n,m,ansx,ansy;
int a[60][60][4],pd[60][60];
bool f=0;
queue<uc > q;

inline  bool check(int x,int y,int t){
	if(pd[x][y]==1) return 1;
	if(pd[x][y+1]==1) return 1;
	if(pd[x+1][y]==1) return 1;
	if(pd[x+1][y+1]==1) return 1;
	return 0;
}

int main(){
	memset(a,-1,sizeof(a));
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>pd[i][j];		
		}
	}
	int x,y,tt;
	cin>>x>>y>>ansx>>ansy;
	char FX; cin>>FX;
	if(FX=='N') tt=1; 
	if(FX=='W') tt=2;
	if(FX=='S') tt=3;
	if(FX=='E') tt=4;
	uc tmpp={x,y,tt,-1};
	q.push(tmpp);
	a[x][y][tt]=0;
	while(!q.empty()){
		uc tmp=q.front();q.pop();
		if(tmp.x==ansx&&tmp.y==ansy){
			cout<<a[tmp.x][tmp.y][tmp.t];
			return 0;
		}
		for(int i=1;i<=4;i++){
			int t=tmp.t;
			uc bbb;
			if(i!=t&&i!=tmp.l){
				int p=abs(t-i);
				a[x][y][i]=a[x][y][t]+p;
				t=i;
				bbb.l=t;
			}
			for(int j=1;j<=3;j++){
				int x=tmp.x+(fx[t]*j);
				int y=tmp.y+(fy[t]*j);
				if(check(x,y,t)) continue;
				if(a[x][y][t]!=-1) continue;
				a[x][y][t]=a[tmp.x][tmp.y][t]+1;
			 	bbb.x=x;
				bbb.y=y;
				bbb.t=t;
				q.push(bbb);
			}	
		}
		
	}
	cout<<-1;
	return 0;
}
2023/3/29 13:39
加载中...