题解 | #迷宫问题#

迷宫问题

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

package main

import (
    "fmt"
)

func dfs(matrix [][]int, row int, col int, visited [][]bool, path *[][2]int) bool {
    m, n := len(matrix), len(matrix[0])

    // 递归出口
    if row == m-1 && col == n-1 {
        *path = append(*path, [2]int{row, col})
        return true
    }

    if row<0 || row>=m || col<0 || col>=n || matrix[row][col] == 1 || visited[row][col] {
        return false
    }

    *path = append(*path, [2]int{row, col})
    visited[row][col] = true

    if dfs(matrix, row-1, col, visited, path) || dfs(matrix, row+1, col, visited, path) || dfs(matrix, row, col-1, visited, path) || dfs(matrix, row, col+1, visited, path) {
        return true
    }

    *path = (*path)[:len(*path)-1]
    visited[row][col] = false
    return false
}

func main() {
    var m, n int
    fmt.Scan(&m, &n)

    matrix := make([][]int, m)
    for i:=0; i<m; i++ {
        matrix[i] = make([]int, n)
    }

    for i:=0; i<m; i++ {
        for j:=0; j<n; j++ {
            var num int
            fmt.Scan(&num)
            matrix[i][j] = num
        }
    }

    visited := make([][]bool, m)
    for i:=0; i<m; i++ {
        visited[i] = make([]bool, n)
    }
    var path [][2]int
    dfs(matrix, 0, 0, visited, &path)

    for _, p := range path {
        fmt.Printf("(%d,%d)\n", p[0], p[1])
    }
}
// 本题输入为一个矩阵,所以采用 fmt.Scan(&m, &n)

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 16:22
主包是26应届生,投大厂简历一直过不了初筛,想问问大家有必要花钱改简历吗
Java抽象带篮子:我之前专门发个帖子说不要付费改简历的,里面还详细写了简历怎么写,你可以去看看
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务