每日一练python82

题目:(所有路径)给定一个有 n 个节点的有向无环图,用二维数组 graph 表示,请找到所有从 0 到 n-1 的路径并输出(不要求按顺序)graph 的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。

示例 1:

输入:graph = [[1,2],[3],[3],[]] 输出:[[0,1,3],[0,2,3]] 解释:有两条路径 0 -> 1 ->
3 和 0 -> 2 -> 3
示例 2:

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]
输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]
示例 3:

输入:graph = [[1],[]] 输出:[[0,1]]
示例 4:

输入:graph = [[1,2,3],[2],[3],[]] 输出:[[0,1,2,3],[0,2,3],[0,3]] 示例 5:

输入:graph = [[1,3],[2],[3],[]] 输出:[[0,1,2,3],[0,3]]

提示:

n == graph.length 2 <= n <= 15 0 <= graph[i][j] < n graph[i][j] != i
保证输入为有向无环图 (GAD)

程序说明:
运用深度搜索方式即可求出所有路径,因为此题是一个有向无环图,因此不用考虑是否有重复的路径。
简单解释一下什么是“图”:是一种比树更为复杂的数据结构。树的节点之间是一对多的关系,并且存在父与子的层级划分;而图的顶点之间是多对多的关系,并且所有顶点都是平等的,如图所示,每个原点便称作顶点;而图中每个顶点之间的距离却是不完全相等的,每条边称作权重。
在这里插入图片描述
顶点之间的边有了方向的区分,这种带有方向的图被称为有向图,如图所示
在这里插入图片描述

全部代码:

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        li= [0]*len(graph)
        num = [0]
        res = []
        def dfs(i,num):
            if i == len(graph)-1:
                res.append(list(num))
            for j in graph[i]:
                if li[j] == 0:
                    li[j] = 1
                    num.append(j)
                    dfs(j,num)
                    num.pop(-1)
                    li[j] = 0
        li[0] = 1
        dfs(0,num)
        return res

题目来源:力扣(leetcode)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值