题解 | #迷宫问题# DFS + 回溯

迷宫问题

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

JS Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let maze = [];
    while ((line = await readline())) {
        maze.push(line.split(" ").map(Number));
    }
    let coos = maze.shift();
    let row = coos[0],
        col = coos[1];
    let path = [];

    function dfs(r, c) {
        // 1. 判断当前位置是否在迷宫内
        if (r < 0 || r >= row || c < 0 || c >= col || maze[r][c] === 1)
            return false;
        // 2. 当前位置在迷宫内, 标记当前位置为已走过(1)、
        //    将当前位置记入path
        maze[r][c] = 1;
        path.push([r, c]);
        // 3. 判断路径是否结束(走到终点)
        if (r === row - 1 && c === col - 1) return true;
        // 4. 路径没有结束,向四个方向寻找下一位置
        if (dfs(r + 1, c) || dfs(r - 1, c) || dfs(r, c + 1) || dfs(r, c - 1))
            return true;
        // 5. 没找到合法位置,回溯、退出
        path.pop();
        return false;
    }

    dfs(0, 0);

    for (p of path) {
        console.log(`(${p[0]},${p[1]})`);
    }
})();

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-16 01:46
点赞 评论 收藏
分享
10-21 00:37
已编辑
门头沟学院 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
xdu通信dddd:我小米都面完两个月了 八月底面完的,现在还是显示面试中,没有比我恐怖的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务