求助52
查看原帖
求助52
467443
A宋锦瑞A楼主2022/7/25 14:04
#include<bits/stdc++.h>

using namespace std;

struct node {
	int x,y,s;
};

int n,m;
string mp[301];
bool v[301][301];
int x,y;
int fx[4][2]= {1,0,-1,0,0,-1,0,1};

int bfs(int x,int y) {
	queue<node>q;
	q.push({x,y,0});
	node a,b;
	v[x][y]=1;
	a.s=0,b.s=0;
	while(q.size()!=0) {
		a=q.front();
		q.pop();
		if(mp[a.x][a.y]=='=') {
			return a.s;
		}
		for(int i=0; i<4; i++) {
			bool flag=0;
			b.x=a.x+fx[i][0];
			b.y=a.y+fx[i][1];
			if(b.x<0||b.y<0||b.x>=n||b.y>=m||mp[b.x][b.y]=='#'||v[b.x][b.y]==1) {
				continue;
			}
			if(mp[b.x][b.y]>='A'&&mp[b.x][b.y]<='Z') {
				for(int j=0; j<n; j++) {
					for(int k=0; k<m; k++) {
						if(mp[j][k]==mp[b.x][b.y]&&(j!=b.x&&k!=b.y)) {
							q.push({j,k,a.s+1});
							flag=1;
						}
					}
				}
			}
			if(flag==0) {
				v[b.x][b.y]=1;
				b.s=a.s+1;
				q.push(b);
			}
		}
	}
}

int main() {
	cin>>n>>m;
	for(int i=0; i<n; i++) {
		cin>>mp[i];
	}
	for(int i=0; i<n; i++) {
		for(int j=0; j<m; j++) {
			if(mp[i][j]=='@') {
				cout<<bfs(i,j);
				return 0;
			}
		}
	}

	return 0;
}
2022/7/25 14:04
加载中...