算法导论习题解-第22章基本的图算法

本文介绍了图算法的基础概念,包括深度优先搜索(DFS)、有向无环图(DAG)及其拓扑排序。详细讨论了强连通分量的判断和求解方法,以及无向图的关节点和桥的特性。此外,还涵盖了算法导论中部分习题的解答,涉及树的直径计算、无向图的特定路径寻找等实际问题。
摘要由CSDN通过智能技术生成

总结

深度优先搜索

按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自 算法概论 by dasgupta)

有向无环图和拓扑排序

  • 有向图有环当且仅当DFS过程中遇到回边。
  • 有向无环图中每一条边都指向一个finish值更小的顶点。
  • 对于DFS,无环性、可线性化、无回边三者是等价的。

拓扑排序的两种方式:(1)由上述性质2可知,将顶点按照finish值降序排列即可。(2)每次删除一个只有出边没有入边的顶点。在实现时,记录下每个顶点的入边数量,一旦某个顶点的入边数量降为0,即可输出该顶点。这样的话两种算法的效率是一样的,都是O(V+E)。

强连通分量

一个强连通分量是指分量中任意顶点之间都是互相可达的。将一个分量收缩成一个点,则原图变成一个有向无环图。(图片来自 算法概论 by dasgupta)

假设分量A有指向分量B的边,则从A做DFS一定可以探索完B的节点,而从B出发不可能到达任何A的节点。假设在收缩图中,B是一个汇点,那么从B的任何顶点出发,将只可能探索到B中的顶点。如何找到这样的汇点分量B呢?将原图的所有边反转,在收缩图中B就成为源点(只有出边没有入边),就可以成为拓扑排序的第一个元素。算法实现:两遍DFS,先在原图上进行,然后在反转图上进行,且按照第一遍finish值递减的顺序,森林中的每一棵树就是一个分量。第一遍DFS的目的: If we do a DFS of graph

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值