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

