找出一个图中所有的强连通子图

这篇博客介绍了如何利用kosaraju算法在O(v+e)的时间复杂度内找到有向图中的强连通子图。首先,通过深度优先遍历得到每个节点的结束时间,并存储在栈中。然后反转图,根据栈中节点的结束时间顺序进行深度优先遍历,从而找出所有强连通子图。
摘要由CSDN通过智能技术生成

      如果一个有向图中的没对顶点都可以从通过路径可达,那么就称这个图是强连通的。一个 strongly connected component就是一个有向图中最大的强连通子图。下图中就有三个强连通子图:


应用kosaraju算法,可以在O(v+e)的时间内找到强连通子图。下面是kosaraju算法的具体步骤:

1,创建一个stack,对图进行深度优先遍历。对于每一个节点,当应用DFS遍历其所有邻接点返回之后把它压入stack。

2,改变图中所有边的方向,以获得该图的方向图。

3,在stack非空的条件下不断的弹出节点v,对于每个节点v,都把它当做起始节点对它进行深度优先遍历。由对v为起始节点进行的深度优先遍历打印出的节点组成的图是强连通子图。

算法怎么理解呢:首先,对于强连通图进行深度优先遍历,得到的一定是一棵树。但是对于一个非强连通图,进行深度优先遍历,最后生成的有可能是一个树࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值