回溯法解决老鼠迷宫问题

//回溯法解决老鼠迷宫问题
//基本结构 迷宫用二维数组表示
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));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值