点进来的你一定是大佬
  • 板块灌水区
  • 楼主haimingbei
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/15 23:26
  • 上次更新2024/8/16 10:04:10
查看原帖
点进来的你一定是大佬
1235026
haimingbei楼主2024/8/15 23:26

P1825

不知道为啥,bfs里面死循环出不来,dalao看一下

#include<bits/stdc++.h>
using namespace std;
int n,m,a[310][310],qx,qy,zx,zy;
bool b[310][310];
char c[310][310];
int px[5]={0,1,0,-1,0};
int py[5]={0,0,1,0,-1};
struct code{
	int x,y;
};

struct door{
	int x2,y2,x3,y3;
}w[310];

bool d[310];
queue <code> q;

void bfs(int qx,int qy){
	a[qx][qy]=1;
	b[qx][qy]=1;
	code f;
	f.x=qx,f.y=qy;
	q.push(f);
	int x2,y2;
	while(!q.empty()){//从这 
		x2=q.front().x,y2=q.front().y;
		q.pop();
		for(int i=1;i<=n;i++){
			int u=x2+px[i],v=y2+py[i];
			if(u>=1 && u<=n && v>=1 && v<=m && b[u][v]==0){
				if(c[u][v]>='A' && c[u][v]<='Z'){
					a[u][v]=a[x2][y2]+1;
					code b;
					if(u==w[c[u][v]].x2 && v==w[c[u][v]].y2){
						b.x=w[c[u][v]].x3,b.y=w[c[u][v]].y3;
						q.push(b);
					}
					else if(u==w[c[u][v]].x3 && v==w[c[u][v]].y3){
						b.x=w[c[u][v]].x2,b.y=w[c[u][v]].y2;
						q.push(b);
					}
				}
				else {
					a[u][v]=a[x2][y2]+1;
					code b;
					b.x=u,b.y=v;
					q.push(b);
				}
			}
		}
	}//到这 
}

int main(){
	cin>>n>>m;
	int t=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>c[i][j];
			if(c[i][j]=='#')b[i][j]=1;
			else if(c[i][j]=='@')qx=i,qy=j;
			else if(c[i][j]=='=')zx=i,zy=j;
			else if(c[i][j]>='A' && c[i][j]<='Z'){
					if(d[c[i][j]]==0){
						w[c[i][j]].x2=i,w[c[i][j]].y2=j;
						d[c[i][j]]=1;
					}
					else w[c[i][j]].x3=i,w[c[i][j]].y3=j;
			}
		}
	}
	bfs(qx,qy);
	cout<<a[zx][zy];
  return 0;
}
2024/8/15 23:26
加载中...