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

博主分享了秋招复习中遇到的图论难题,通过深度优先搜索(DFS)和广度优先搜索(BFS)的方法解析力扣797题——寻找有向无环图中所有从节点0到n-1的路径。文章讨论了代码误区,并展示了BFS的正确实现,旨在帮助读者提升图论问题解决能力。
摘要由CSDN通过智能技术生成

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

找图中的路径

力扣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:看了的答案,没有很理解,但懂个大概python中list[0啥意思_python中<list>和<list>[:]的区别_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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值