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