迷宫问题

// 迷宫问题
矩阵是迷宫,1代表墙,0代表通路
人可以上下左右走,判断能否从起点走到终点



起点(1,1)

终点(6,6)

问能不能从起点走到终点 

 

// 思路:找路是一个递归的函数
// 每次尝试能走后,将点的值设置为2,如果最终点的值为2,那么就可以走到终点
 
 
 
源代码:
 
let maze = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 0, 1],
[1, 1, 1, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1]
]

// 起点:(1,1)
// 终点: (6,6)
// 问能不能走到[6][6]


function findway(arr, i, j) {
if (arr[6][6] === 2) {
console.log('能到达终点');
return true
}

if (arr[i][j] == 0) {
// 先假定当前位置可走
arr[i][j] = 2
if (
findway(arr, i + 1, j) || // 下
findway(arr, i, j + 1) || // 右
findway(arr, i - 1, j) || // 上
findway(arr, i, j - 1) // 左
) {
return true
} else {
// 如果
arr[i][j] = 0
return false
}
} else {
return false // 不可走
}

}


let old = JSON.parse(JSON.stringify(maze))

console.log(old);
console.log('----------');

// 调用找路方法
const r = findway(maze, 1, 1) // 1. 1作为 起点
// console.log(maze);

console.log(r);
 
 
 

 

内部执行顺序:

 

内部执行顺序,从(1,1)开始走,1,2,3,4,5,6

从(1,1)开始 向下,
走到2 向下
走到3 向下
走到4 向下 发现走不了,向右,
走到5 向下 走不了 向右
走到6 向下 走不了 向右 走不了 向上 走不了 向左 走不了(因为是2)此时回退(设置回0)
下面到了5,向上走不了 向左 走不了 此时回退(设置回0)

... 

 

posted @ 2020-05-17 20:54  hh9515  阅读(206)  评论(0)    收藏  举报