题解 | #迷宫问题#

迷宫问题

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

// x:0 - n-1
// y:0 - m-1

let [n, m] = readline().split(' ').map(i => Number(i))

let map = []

for(let i=0; i<n; i++) {
    map[i] = readline().split(' ').map(i => Number(i))
}

let res = ['(0,0)'], x0 = 0, y0 = 0, to = [[0, 1], [1, 0], [0, -1], [-1, 0]]
let pass = Array(n).fill(0).map(i => Array(m).fill(0)) // 记录已走位置
fn(x0, y0, res)
res.forEach(p => {
    print(p)
})

function fn(x, y, path) {
    if(x==n-1 && y==m-1){
        // 引用类型的赋值是指针,后续递归可能会修改值,而我们需要的是成功时候的值, 此处深拷贝
        res = JSON.parse(JSON.stringify(path)) 
    }
    for(let i=0; i<to.length; i++) {
        let new_x = x+to[i][0]
        let new_y = y+to[i][1]
        if(new_x>=0 && new_x<n && new_y>=0 && new_y<m && map[new_x][new_y]==0 && pass[new_x][new_y]==0) {
            pass[new_x][new_y] = 1
            path.push(`(${new_x},${new_y})`)
            fn(new_x, new_y, path)
            path.pop() // 回溯
        }
    }
    return
}
全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务