【力扣】797:所有可能的路径 | 图| 回溯算法

题目描述

给一个有 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 -> 30 -> 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%的用户

哦,这个回溯算法也可以是深度优先搜索。

发布了317 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/105690434
今日推荐