39啊大佬救救
查看原帖
39啊大佬救救
566190
我是歌者楼主2023/7/23 19:08
#include<bits/stdc++.h>
using namespace std;
char a[1000][1000];
int n,m,ans=0x3ffff;
bool vis[10000][10000];
struct www{
	int x;
	int y;
	int s;
};
queue<www> q;
int xt[4]={0,0,1,-1};
int yt[4]={1,-1,0,0};
int chuanx[100];
int chuany[100];
char chuancha[100];
int bfs(){
	while(!q.empty()){
		www t=q.front();
		if(a[t.x][t.y]=='='){
			ans=min(ans,t.s);
			return 0;
		}
		q.pop();
		for(int i=0;i<4;i++){
			int tx=t.x+xt[i];
			int ty=t.y+yt[i];
			if(tx<=0||tx>n||ty<=0||ty>m||vis[tx][ty]==1) continue;
			else if(a[tx][ty]=='#') continue;
			else if('A'<=a[tx][ty]&&a[tx][ty]<='Z'){
				for(int j=0;j<n;j++){
					if((chuancha[j]==a[tx][ty])&&(chuanx[j]!=tx || chuany[j]!=ty)){
						q.push({chuanx[j],chuany[j],t.s+1});
						vis[chuanx[j]][chuany[j]]=1;
						vis[tx][ty]=1; 
						break;
					}
				}
				
			}
			else if(a[tx][ty]=='.'||a[tx][ty]=='='){
				q.push({tx,ty,t.s+1});
				vis[tx][ty]=1;
			}
			
			
		}
	}
	return 0;
}

int main(){
	int idex=1;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if('A'<=a[i][j]&&a[i][j]<='Z'){
				chuanx[idex]=i;
				chuany[idex]=j;
				chuancha[idex]=a[i][j];
				idex++;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='@'){
				q.push({i,j,0});
				vis[i][j]=1;
				bfs();
			}
			
		}
	}
	cout<<ans;
	return 0;
}
2023/7/23 19:08
加载中...