迷宫问题
// 迷宫问题
矩阵是迷宫,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)
...