急救,只有30分!
查看原帖
急救,只有30分!
627732
Fuxh_18楼主2024/5/23 20:14

我用的 BFS,却只得了 30 分,大佬求解!

#include<bits/stdc++.h>
using namespace std;
struct zz{
	int x,y,t,f;
};
int n,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1},qx,qy,zx,zy,minn=1000000000,v[111][111];
char c[111][111];
queue<zz> q;
int bfs(){
	int ff=0;
	while(!q.empty()){
		for(int i=0;i<4;i++){
			zz now;
			now.x=q.front().x+dx[i];
			now.y=q.front().y+dy[i];
			if(i!=q.front().f)
			{
				now.t=q.front().t+1;
			}
			else
			{
				now.t=q.front().t;
			}
			now.f=i;
			if(now.x>=1&&now.x<=n&&now.y>=1&&now.y<=n&&v[now.x][now.y]==0)
			{
				v[now.x][now.y]=1;
				q.push(now);
				if(c[now.x][now.y]=='B')
				{
					ff=1;
					minn=min(minn,now.t);
				}
			}
		}
		q.pop();
	}
	if(ff==1)
		return minn;
	else
		return -1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c[i][j];
			if(c[i][j]=='A')
			{
				qx=i;
				qy=j;
			}
			if(c[i][j]=='x')
			{
				v[i][j]=1;
			}
		}
	}
	v[qx][qy]=1;
	zz no;
	for(int i=0;i<4;i++){
		no.x=qx+dx[i];
		no.y=qy+dy[i];
		no.t=0;
		no.f=i;
		if(no.x>=1&&no.x<=n&&no.y>=1&&no.y<=n&&c[no.x][no.y]!='x'&&v[no.x][no.y]==0)
		{
			q.push(no);
			v[no.x][no.y]=1;
		}
	}
	cout<<bfs();
	return 0;
}
2024/5/23 20:14
加载中...