问题描述
LeetCode 797题“所有可能的路径”要求在有向无环图(DAG)中,从节点 0 到节点 n-1 的所有路径。图的表示形式为邻接表,其中 graph[i] 是节点 i 的直接邻居列表。
解决思路
使用深度优先搜索(DFS)遍历图的所有可能路径。由于题目保证图为有向无环图(DAG),无需处理环的情况。
算法步骤
初始化一个空列表 result 存储所有路径,一个临时列表 path 记录当前路径。
从节点 0 开始递归调用DFS函数,每次访问节点时将其加入 path 中。当到达目标节点 n-1 时,将当前 path 加入 result。
回溯时从 path 中移除当前节点,确保其他路径的探索不受影响。
代码实现
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
result = []
n = len(graph)
def dfs(node, path):
if node == n - 1:
result.append(path.copy())
return
for neighbor in graph[node]:
path.append(neighbor)
dfs(neighbor, path)
path.pop()
dfs(0, [0])
return result
复杂度分析
- 时间复杂度:O(2^N * N),其中 N 为节点数。最坏情况下每个节点有两个选择(如二叉树结构),路径长度为 O(N)。
- 空间复杂度:O(N),递归栈深度和临时路径
path的空间占用。
示例
输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:从节点 0 出发,有两条路径可达节点 3。
LeetCode 797:DAG中所有路径
928

被折叠的 条评论
为什么被折叠?



