📅  最后修改于: 2023-12-03 15:35:50.664000             🧑  作者: Mango
在一个有向图中,你总共有 n 个节点。你被赋予一个二维数组 graph,其中 graph[i] 是一个数组,表示 i 接到的所有节点的下标。
请你返回若干个长度为 n 的路径,其中每个路径都由从节点 0 到节点 n-1 的所有节点组成。答案可以按任意顺序返回。当不存在从节点 0 到节点 n-1 的路径时,返回一个空列表。
输入:graph = [[1,2],[3],[3],[4],[]]
输出:[[0,1,3,4],[0,2,3,4]]
解释:两条路径 0 -> 1 -> 3 -> 4 和 0 -> 2 -> 3 -> 4
可以使用 DFS 或 BFS 解题,本篇介绍使用 BFS 解题。首先将起点 0 加入队列中,queue 存储的是节点下标。在队列不为空的时候,每次从队首取出一个节点,遍历它所有可以访问到的节点,如果该节点没有被访问过,就标记为 visited,存储它的路径,加入队列。
from collections import deque
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
n = len(graph)
res = []
visited = [False] * n
adj = {i: graph[i] for i in range(n)}
queue = deque()
queue.append((0, [0]))
while queue:
curr, path = queue.popleft()
visited[curr] = True
for neighbor in adj[curr]:
if not visited[neighbor]:
if neighbor == n - 1:
res.append(path + [neighbor])
visited[neighbor] = False
else:
queue.append((neighbor, path + [neighbor]))
return res