题解 | #迷宫问题#

迷宫问题

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

#include <iostream>
using namespace std;
#include <bits/stdc++.h>
const vector<pair<int,int>>dirs = {{1,0},{0,1},{-1,0},{0,-1}};//顺时针右下左上
pair<int,int> fa[15][15];
void dfs(int x,int y){
    if(x==0&&y==0)return;
    auto t = fa[x][y];
    dfs(t.first,t.second);//深度优先搜索搜索到根节点打印该路径
    printf("(%d,%d)\n",x,y);
}
int main() {
    int m, n;
    cin>>m>>n;
    vector<vector<int>>grip(m,vector<int>(n,0));
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cin>>grip[i][j];
        }
    }
    //vector<pair<int,int>>track;
    queue<pair<int,int>>q;
    
    q.push({0,0});
    grip[0][0] = 1;
    while(!q.empty()){
        auto cur = q.front();
        q.pop();
        
        if(cur.first==m-1 && cur.second==n-1)break;
        for(auto dir : dirs){
            int nextX = cur.first+dir.first;
            int nextY = cur.second+dir.second;
            if(nextX < 0 || nextY<0||nextX>=m||nextY>=n||grip[nextX][nextY]==1)continue;
            fa[nextX][nextY] = cur;//记录下一个节点(nx,ny)的父节点坐标
            q.push({nextX,nextY});
            grip[nextX][nextY] = 1;   
        }
    }
    printf("(%d,%d)\n",0,0);
    dfs(m-1,n-1);
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

03-13 09:57
已编辑
武汉大学 Java
点赞 评论 收藏
分享
穿件外套出门:这简历一眼太水了,前面有的没的直接删,写项目亮点
点赞 评论 收藏
分享
优秀的肱二头肌不想上班:改改简历吧,简历太简单了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务