//回溯法解决老鼠迷宫问题
//基本结构 迷宫用二维数组表示
function ratInMaze(maze) {
//初始化输出结果类型为二维数组先用0填充
const solution = []
for (let i = 0; i < maze.length; i++) {
solution[i] = []
for (let j = 0; j < maze[i].length; j++) {
solution[i][j] = 0
}
}
//调用寻找路径的方法
if (findPath(maze, 0, 0, solution) === true) {
return solution
}
return 'NO PATH FOUND'
}
//findPath方法
function findPath(maze, x, y, solution) {
//maze 条件 x,y 初始位置坐标 solution 返回结果
const n = maze.length
//结束条件 到达迷宫出口
if (x === n - 1 && y === n - 1) {
solution[x][y] = 1
return true
}
//坐标的位置大于0且小于初始数组的长度 且初始数组中该位置的值不为0 结果数组该位置赋值1
if (isSafe(maze, x, y) === true) {
solution[x][y] = 1
//往右走一步
if (findPath(maze, x + 1, y, solution)) {
return true
}
//往右走不通 往下走一步
if (findPath(maze, x, y + 1, solution)) {
return true
}
//走不通
solution[x][y] = 0
return false
}
return false
}
function isSafe(maze, x, y) {
const n = maze.length
//坐标的位置大于0且小于初始数组的长度 且该位置的值不为0
if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {
return true
}
return false
}
const maze = [
[1, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 1, 0],
[0, 1, 1, 1]
]
console.log(ratInMaze(maze));
回溯法解决老鼠迷宫问题
最新推荐文章于 2023-01-20 15:17:33 发布