找到从节点0到n-1的所有路径,肯定是用dfs算法,不过有两种思考方式:
一种是:从后往前考虑。如果这条路能到n-1节点,那么dfs返回一个rec列表,里面存路径。
class Solution:def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:end = len(graph)-1def 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) - 1def dfs(node):rec.append(node)if node == end:ans.append(rec[:])for nex in graph[node]:dfs(nex)rec.pop()dfs(0)return ans