急救T^T
查看原帖
急救T^T
627732
Fuxh_18楼主2024/5/23 19:42

我用的BFS,但错了。

#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[101][101];
char c[101][101],lx;
queue<zz> q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>lx;
			if(lx!=' ')
			{
				c[i][j]=lx;
				if(c[i][j]=='A')
				{
					qx=i;
					qy=j;
				}
				if(c[i][j]=='x')
				{
					v[i][j]=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;
		}
	}
	v[qx][qy]=1;
	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;
				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')
				{
					minn=min(minn,now.t);
				}
			}
		}
		q.pop();
	}
	cout<<-1;
	return 0;
}
2024/5/23 19:42
加载中...