当前位置: 首页 > 知识库问答 >
问题:

独特路径II-DFS方法

欧阳何平
2023-03-14

我试图解决以下问题https://leetcode.com/problems/unique-paths-ii/

问题如下:障碍物和空间在网格中分别标记为1和0。

输入:障碍物网格=[[0,0,0],[0,1,0],[0,0,0]]

产出:2

说明:

在上面的3x3网格的中间有一个障碍。有两种方法可以到达右下角:

  1. 对-

我的DFS解决方案如下,但它返回1而不是2。我想知道我在以下方法中错过了什么?

class Solution {
    func uniquePathsWithObstacles(_ obstacleGrid: [[Int]]) -> Int {
        var column = obstacleGrid[0].count
        var row = obstacleGrid.count
        var visited = Array(repeating: Array(repeating: false, count:column), count: row)
        return dfs(obstacleGrid, 0, 0, &visited)
    }
    
    func dfs(_ obstacleGrid: [[Int]], _ i: Int, _ j: Int, _ visited: inout [[Bool]]) -> Int {
        if i < 0 || i >= obstacleGrid.count || j < 0 || j >= obstacleGrid[0].count || obstacleGrid[i][j] == 1 || visited[i][j] == true {
            return 0
        } 
        
        visited[i][j] = true

        if i == obstacleGrid.count - 1 && j == obstacleGrid[0].count - 1 {
          return 1
        }
        
        return dfs(obstacleGrid, i+1, 0, &visited) + 
        dfs(obstacleGrid, i-1, 0, &visited) +
        dfs(obstacleGrid, i, j+1, &visited) +
        dfs(obstacleGrid, i, j-1, &visited)
    }
}

共有1个答案

慕俊迈
2023-03-14

如果访问[i][j]看起来不正确,则返回0。您应该记住已访问单元格的返回值,并在以后调用该单元格时再次返回。原因是你可以通过不同的路径到达那个细胞,而每一条路径都应该对结果有所贡献。

代码返回1是有道理的,因为第二次到达右下角的单元格时,您将返回0,因为在发现前一条路径的过程中,该单元格已被“访问”。

 类似资料:
  • Unique Paths II 描述 Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectiv

  • N-Queens II 描述 Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. 分析 只需要输出解的个数,不需要输出所有解,代码要比上一题简化很多。设一个全局计数器,每找到一个解就增 1。 代码 1

  • Combination Sum II 描述 Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. Each number in C may only be used on

  • 我试图使用DFS解决一个图形问题,但遇到了一堵墙。这是我在Python3中的实现。unvisited是一个整数数组,start和end是unvisited中的整数,path是一个空数组,在DFS运行时填充,edges是一个边字典。 目标是找到一条从开始到结束访问unvisted中所有int的路径。因此,我遇到了递归的问题(我认为),因为在路径错误的情况下,我不想返回任何东西;相反,我希望DFS继续

  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。

  • 我有以下Java代码,可以在图中找到从一个节点到另一个节点的路径,如何修改它,以便显示所有可能的路径。这里只显示了一条路径,它是一个循环? 输出:路径:[1、2、3、4、1] 对于节点1和4之间的路径,正确的输出应该是: 第一条路径:1- 第二条路径:1- 代码: