广搜题解
2025-01-15 15:37:32
发布于:广东
20阅读
0回复
0点赞
#include<iostream>
#include<queue>
using namespace std;
int n,m,vis[2005][2005],f;
int sx,sy,ex,ey;
char a[2005][2005];
struct node{
    int x,y,s;
}l,r;
queue<node> que;
int x1[8]={0,0,1,-1};
int y1[8]={1,-1,0,0};
void bfs(){
    while(que.size()){
        l=que.front();
        que.pop();
        if(l.x==ex and l.y==ey){
            cout<<l.s;
            f=1;
            return ;
        }
        for(int i=0;i<4;i++){
            r.x=l.x+x1[i];
            r.y=l.y+y1[i];
            if(r.x>=1&&r.x<=n&&r.y>=1&&r.y<=m&&a[r.x][r.y]!='#'&&vis[r.x][r.y]==0){
                r.s=l.s+1;
                que.push(r);
                vis[r.x][r.y]=1;
            }
        }
    }
}
int main(){
    cin>>n>>m;
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]=='@'){
                sx=i;
                sy=j;
            }
            if(a[i][j]=='*'){
                ex=i;
                ey=j;
            }
        }
    }
    que.push({sx,sy,0});
    vis[sx][sy]=1;
    bfs();
    if(f==0){
        cout<<-1;
    }
}
全部评论 1
666
2025-01-15 来自 广东
0

有帮助,赞一个