59分求调
查看原帖
59分求调
1286360
Hbh1617楼主2025/7/28 19:14
#include<bits/stdc++.h>
using namespace std;
int s1,s2,t1,t2;
int n,m;
char a[310][310];
int vis[310][310];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
pair<int,int> find(int x,int y){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==a[x][y]&&(i!=x||j!=y)){
				return make_pair(i,j);
			}
		}
	}
	return {-1,-1}; 
}
void bfs(){
	queue<pair<pair<int,int>,int>>q;
	vis[s1][s2]=1;
	q.push({{s1,s2},0});
	while(!q.empty()){
		auto f=q.front();q.pop();
		int x=f.first.first,y=f.first.second;
		if(x==t1&&y==t2){
			cout<<f.second;
			return;
		}
		for(int i=0;i<4;i++){
			int tx=x+dx[i],ty=y+dy[i];
			if(tx<1||ty<1||tx>n||ty>m||vis[tx][ty])continue;
			vis[tx][ty]=1;
			if(a[tx][ty]=='.'||a[tx][ty]=='='){
				q.push({{tx,ty},f.second+1});
			}
			else{
				auto t=find(tx,ty);
				if(t.first==-1||t.second==-1)continue;
				vis[t.first][t.second]=1;
				q.push({t,f.second+1});
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char c;
			cin>>c;
			a[i][j]=c;
			if(a[i][j]=='@'){
				s1=i;s2=j;
			}
			else if(a[i][j]=='='){
				t1=i;t2=j;
			}
			else if(a[i][j]=='#'){
				vis[i][j]=1;
			}
		}
	}
	bfs();
    return 0;
}

有效回答者闭关

2025/7/28 19:14
加载中...