题目描述
给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序)
二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。
输入: [[1,2], [3], [3], []]
输出: [[0,1,3],[0,2,3]]
解释: 图是这样的:
0--->1
| |
v v
2--->3
这有两条路: 0 -> 1 -> 3 和 0 -> 2 -> 3.
算法思路
这貌似是我第一次做图的题,因为是有向无环,所以从节点0出发一定可以走到节点n-1,这是道相对简单的题。
我的第一思路就是将给定的参数化作字典,然后用回溯算法来解题,好比一个小人从0开始走,0所连接的其他节点就是小人见到的门,按顺序进入门到下一个节点,到n-1结束,把记录的路径保存下来,然后往回走,从另一个门进入。
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
d={i:j for i,j in enumerate(graph)}
res=[]
def helper(t=[0]):
if not d[t[-1]]:
res.append(t)
for i in d[t[-1]]:
helper(t+[i])
helper()
return res
执行用时 :116 ms, 在所有 Python3 提交中击败了62.24%的用户
内存消耗 :15.2 MB, 在所有 Python3 提交中击败了40.00%的用户
哦,这个回溯算法也可以是深度优先搜索。