7分求条玄2关
查看原帖
7分求条玄2关
1352096
Rey55555楼主2025/7/31 15:06
#include<bits/stdc++.h>
using namespace std;
struct Node {
    int x, y, t;
};
char a[305][305];
bool vis[305][305];
string s;
int n,m,sx,sy;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void change(int nx,int ny){
    char c=a[nx][ny];
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==c&&(i!=nx||j!=ny)){
                nx=i;
                ny=j;
                return;
            }
        }
    }
}
int bfs(){
    queue<Node> q;
    q.push({sx,sy,0});
    vis[sx][sy]=true;
    while(!q.empty()){
        Node f=q.front();
        q.pop();
        if(a[f.x][f.y]=='='){
            return f.t;
        }
        if(a[f.x][f.y]>='A'&&a[f.x][f.y]<='Z'){
            int nx=f.x,ny=f.y;
            change(nx,ny);
            q.push({nx,ny,f.t});
            continue;
        }
        for(int i=0;i<4;i++) {
            int nx=f.x+dx[i];
            int ny=f.y+dy[i];
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!='#'&&!vis[nx][ny]){
                vis[nx][ny]=true;
                q.push({nx,ny,f.t+1});
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s;
        for(int j=1;j<=m;j++){
            a[i][j]=s[j-1];
            if(a[i][j]=='@'){
                sx=i;
                sy=j;
            }
        }
    }
    cout<<bfs()<<endl;
}
2025/7/31 15:06
加载中...