题解 | 走迷宫

走迷宫

https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64

#include <bits/stdc++.h>
using namespace std;

int n,m,xs,ys,xt,yt;

vector<vector<char>> grid;
vector<vector<int>> dist;

int dfs(){
    queue<pair<int,int>> q;
    q.push({xs,ys});
    dist[xs][ys]=0;
    //上下左右
    int dx[4]={-1,1,0,0};
    int dy[4]={0,0,-1,1};
    while(!q.empty()){
        auto current = q.front();
        q.pop();
        int x=current.first;
        int y=current.second;

        if(x==xt&&y==yt){
            return dist[x][y];//bfs得出路径必为最短路径
        }

        for(int i=0;i<4;i++){
            int nx=x+dx[i],ny=y+dy[i];
            if(nx<n && nx>=0 && ny<m && ny>=0 && grid[nx][ny]!='*' && dist[nx][ny]==-1){
                dist[nx][ny]=dist[x][y]+1;
                q.push({nx,ny});
            }
        }
    }
    return -1;
}

int main() {
    cin>>n>>m;
    cin>>xs>>ys>>xt>>yt;
    xs--;ys--;xt--;yt--;
    grid.resize(n,vector<char>(m));//初始化网格大小!否则会非法访问
    dist.resize(n,vector<int>(m,-1));//初始化距离为-1,同时作为未访问标记
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>grid[i][j];
        }
    }
    if(grid[xt][yt]=='*'){
        cout<<-1;
        return 0;
    }
    int res;
    res=dfs();
    cout<<res;
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务