有向图的强连通分量

定义

有向图G = (V,E)的一个强连通分量是一个最大的顶点集合C,对于C中的每一对顶点u和v,有u可达v且v可达u,即顶点u和v互相可达。

算法

拓扑排序

在这里插入图片描述

TOPOLOGICAL-SORT(G)
1 调用DFS(G)计算每个顶点v的完成时间f[v]
2 当每个顶点已完成时,将其插入到链表的前面
3 返回顶点链表

强连通分量

在这里插入图片描述

STRONGLY-CONNECTED-COMPONENTS(G)
1 调用DFS(G)计算每个顶点u的完成时间f[u]
2 计算G的转置图GT
3 调用DFS(GT). 但再DFS主循环中,按第一步计算的f[u]降序考虑顶点
4 将第3步中形成的深度优先森林中每颗树的顶点作为单独的强连通分量输出
  //每颗深搜树T对应一个强连通分量C

题目

在这里插入图片描述
在这里插入图片描述

基本思想是用一个简单有向环替换每个强连通分量SCC内部的边,然后删除SCC之间的冗余边。
因为在具有k个顶点的 SCC中必须至少有k个边,k条边的有向环给出了具有最少可能边的k顶点SCC.
该算法的工作如下:
1 识别G的所有强连通分量SCC
2 形成强连通分量图GSCC
3 E' = NIL
4 对于G的每个SCC,设SCC中的顶点为v1, v2, ..., vk, 
将有向边(v1, v2), (v2, v3),...,(vk-1, vk),(vk, v1)添加到E'.
这些边形成一个简单的有向环,包括SCC的所有顶点。
5 对于强连通分量图GSCC中的每条边(u, v),选择SCC[u]中的任意顶点x和SCC[v]中的任意顶点y
并添加有向边(x, y) to E'.

参考

算法导论原书第二版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值