题解 | #迷宫问题# 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]})`);
    }
})();

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务