题解 | #迷宫问题#

迷宫问题

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

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 [hang, lie] = (await readline()).split(" ");
    let arr = [];
    while ((line = await readline())) {
        let tokens = line.split(" ");
        arr.push(tokens);
    }

    let road = [[0, 0]];
    const dirs = [
        [0, -1],
        [-1, 0],
        [1, 0],
        [0, 1],
        
    ]; // 定义四个方向可以走
    function add(preX, preY, x, y) {
	
		// 这里判断,如果已经到达最后一个点,则返回true,true是告诉上面每一级,不需要再继续循环找出路了,对应的37行的那个判断
        if(x+1 == hang && y+1 == lie) {
            return true
        }
        for (var [dirX, dirY] of dirs) {
            let X = dirX + x;
            let Y = dirY + y;
            if (X == preX && Y == preY) continue;  // 这里是判断如果得到的point是前一个point,则开始下一个循环
            if (X >= hang || Y >= lie || X<0 || Y<0) { // 判断如果出界,则进行下一个循环
                continue
            }
            if (arr[X][Y] == 0) {   // 判断这条路是否能走
                road.push([X, Y]);
				// 这里判断,如果add返回的是一个true,表示已经找到终点了,不需要再继续循环了,直接return 一个true来中断这一整个函数,这个return会层层返回到递归的前面的函数
                if(add(x, y, X, Y)){
                    return true
                };
            }
        }
        road.pop();
    }
    add(0, 0, 0, 0);
    road.forEach(v => {
        console.log(`(${v[0]},${v[1]})`);
    })
})();

全部评论

相关推荐

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