找到从节点0到n-1的所有路径,肯定是用dfs算法,不过有两种思考方式:
一种是:从后往前考虑。如果这条路能到n-1节点,那么dfs返回一个rec列表,里面存路径。
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
end = len(graph)-1
def dfs(node):
if node == end: return [[node]]
rec = []
for nex in graph[node]:
ans = dfs(nex)
for ls in ans:
rec.append([node] + ls)
return rec if rec else []
return dfs(0)
rec里面有路径,表明能走,如果是[],说明没路。
另一种是:从前往后考虑。rec代表的是当前dfs走过的节点,遍历到哪个节点就加进rec尾部,退出哪个dfs,就把当前节点弹出。
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
ans = []
rec = []
end = len(graph) - 1
def dfs(node):
rec.append(node)
if node == end:
ans.append(rec[:])
for nex in graph[node]:
dfs(nex)
rec.pop()
dfs(0)
return ans