A8046
2025-05-03 16:10:24
发布于:江苏
4阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int vis[2005][2005]={},n,m,x,y,bx[4]={1,0,-1,0},by[4]={0,1,0,-1},lx,ly,fx,fy;
char b;
queue<int>q,r;
int main(){
    memset(vis,-1,sizeof(vis));
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>b;
            if(b=='#'){
                vis[i][j]=-2;
            }else{
                vis[i][j]=-1;
            }
            if(b=='@'){
                lx=i;
                ly=j;
            }
            if(b=='*'){
                fx=i;
                fy=j;
            }
        }
    }
    vis[lx][ly]=0;
    q.push(lx);
    r.push(ly);
    while(q.size()){
        x=q.front();
        y=r.front();
        q.pop();
        r.pop();
        if(x==fx&&y==fy){
            cout<<vis[x][y];
            return 0;
        }
        for(int i=0;i<4;i++){
            if(vis[x+bx[i]][y+by[i]]==-1&&x>=1&&y>=1&&x<=n&&y<=m){
                vis[x+bx[i]][y+by[i]]=vis[x][y]+1;
                q.push(x+bx[i]);
                r.push(y+by[i]);
            }
        }
    }
    cout<<-1;
    return 0;
}
这里空空如也




有帮助,赞一个