题解 | #迷宫问题#

迷宫问题

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, []);

全部评论

相关推荐

10-30 16:31
重庆大学 Java
代码飞升_不回私信人...:你说你善于学习,大家都会说。你说你是985,985会替你表达一切
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务