我试图解决以下问题https://leetcode.com/problems/unique-paths-ii/
问题如下:障碍物和空间在网格中分别标记为1和0。
输入:障碍物网格=[[0,0,0],[0,1,0],[0,0,0]]
产出:2
说明:
在上面的3x3网格的中间有一个障碍。有两种方法可以到达右下角:
我的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)
}
}
如果访问[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- 代码: