栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

秋招刷题记录之图论找图中的路径(python)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

秋招刷题记录之图论找图中的路径(python)

秋招已过去一大半,之前因为实习,没好好刷题,多次笔试都栽在了图论上,今天决定好好学习图论!加油!只要坚持努力就不怕晚~

找图中的路径

力扣797题

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)

二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。

译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-paths-from-source-to-target

自己的思路:读懂题意后发现这应该用DFS+回溯来做,但是编程还是出错,原因是还是没有分析好题目。

自己原来的代码:

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        
        res = []
        path = []
        def dfs(node):
            path.append(node) 
            if not graph[node]://错误1:没有读清楚题目
                res.append(path)//错误2:path[:]和path的区别 
                return            
            for j in graph[node]:
                dfs(j)              
                path.pop() 
        for i in range(len(graph))://错误3:不应该加遍历
            dfs(i)
        return res

错误1:题目说是找出所有从节点 0 到节点 n-1 的路径 自己没有好好读题,以为是下一个节点为[]就为一条路径。

错误2:看了的答案,没有很理解,但懂个大概和[:]的区别_weixin_39800990的博客-CSDN博客">python中list[0啥意思_python中[:]的区别_weixin_39800990的博客-CSDN博客

path[:]是path[]的深拷贝,两个列表是不同的,path.pop()后不会改变path[:],如果直接append path,res的值就会随path改变。

错误3:题目说是找出所有从节点 0 到节点 n-1 的路径 ,所以只需要从节点0开始找就可以

修改后的代码时间和空间复杂度:(不太好 有空再研究怎么优化!)

 

 

 再贴一个题解里的BFS方法: (BFS配队列)

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        n = len(graph)
        q = deque([[0]])
        ans = []
        while q:
            path = q.popleft()
            if path[-1] == n - 1:
                ans.append(path)
                continue
            for nxt in graph[path[-1]]:
                q.append(path + [nxt])
        return ans

以后再遇到图问题求路径会继续记录更新~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号