题解 | #迷宫问题#

迷宫问题

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

while(line = readline()){
    const [m,n] = line.split(' ').map(item => item - 0)
    const arr = []
    for(let i = 0; i < m; i++){
        arr.push(readline().split(' ').map(item => item - 0))
    }
    // 1 表示走过,0 表示没走过
    const map = new Array(m).fill().map(() => new Array(n).fill(0))
    // 保存路线的队列
    const queue = []
    // 上下左右四个移动方向
    const flag = [[0,1],[1, 0], [0,-1],[-1 , 0]]
    let over = false
    const dp = (i,j) => {
       // 标记当前已经通过了
        if(over ) return
       // 走到最后位置了
        if(i === m-1 && j == n-1) {
            over = true
            queue.push([i,j])
            return true
        }
      	// 坐标出边界、碰到墙了、之前走过(说明之前没走通) 直接返回函数,后面不用走了
        if(i < 0 || j < 0 || i == m || j== n || arr[i][j] || map[i][j]){
            return false
        }
      	// 走过,后面碰到都不用走了
        map[i][j] = 1
        
        for(let index = 0 ; index< 4 ; index++){
           // 将当前坐标保存到路线队列中
            queue.push([i,j])
            dp(i + flag[index][0], j + flag[index][1])
                if(over)break
            	// 回溯
                queue.pop()
        }
    }
    dp(0,0)
    queue.forEach(item => {
        console.log(`(${item[0]},${item[1]})`)
    })
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务