题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
let n = readline().split(" ").map(Number),
maze = []; //读数据
while ((line = readline())) maze.push(line.split(" ").map(Number));
//重置一个2为数组,用来存是否路径是否走过
let v = [...Array(n[0])].map(() => Array(n[1]).fill(0));
function find(i, j, road) {
road.push([i, j]); //先推入0,0
maze[i][j] = 1;
if (i == n[0] - 1 && j == n[1] - 1) {
for (let i of road) print(`(${i[0]},${i[1]})`);
}
// 在走路过程中,先将v设置成1,1代表走过,回溯的时候置为0,并且删除路径
if (j + 1 < n[1] && maze[i][j + 1] == 0 && v[i][j + 1] == 0) {
v[i][j + 1] = 1;
find(i, j + 1, road);
v[i][j + 1] = 0;
road.pop();
} //右
if (i + 1 < n[0] && maze[i + 1][j] == 0 && v[i + 1][j] == 0) {
v[i + 1][j] = 1;
find(i + 1, j, road);
v[i + 1][j] = 0;
road.pop();
} //下
if (j - 1 >= 0 && maze[i][j - 1] == 0 && v[i][j - 1] == 0) {
v[i][j - 1] = 1;
find(i, j - 1, road);
v[i][j - 1] = 0;
road.pop();
} //左
if (i - 1 >= 0 && maze[i - 1][j] == 0 && v[i - 1][j] == 0) {
v[i - 1][j] = 1;
find(i - 1, j, road);
v[i - 1][j] = 0;
road.pop();
} //上
}
find(0, 0, []);
查看2道真题和解析
滴滴公司福利 1784人发布