Tarjan算法

本文详细介绍了Tarjan算法在求解有向图强连通分量的过程,包括算法原理、步骤解析,并通过实例说明了算法的应用。此外,还探讨了如何利用Tarjan算法寻找无向图中的割点和桥,并提供了相关模板题目的链接。
摘要由CSDN通过智能技术生成

一、Tarjan求有向图强连通分量

1、什么是强连通分量?

“在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。”

简单来说 连通:在向图中,从任意点i可到达任意点j (如下图所示,可以想象成电话线,a可以给b打电话,b也可以给a打)

强连通:在向图中,从任意点i可到达任意点j

强连通是比较难实现的,所以在一般情况下我们只能退而求其次,求出这个图中在某一些局部的区域是强连通的,由此引出强连通分量的概念(有向图的极大强连通子图), 下图红色区域内的即为强连通分量。反正就是在图中找到一个最大的图,使这个图中每个两点都能够互相到达。这个最大的图称为强连通分量,同时一个单独的点也属于强连通分量。

2、强连通分量怎么找?

DFS遍历:先递归相邻节点,再访问当前节点

如果仍然是上面那张图,我们对它进行DFS遍历

在这我们举个例子来说明

先定义顶点x(i,j),

i:DFS中,x点被访问的时间点

j:x通过有向边可回溯到的最早时间点

 

 首先 我们先访问a点,此时a的时间点属性为(1,1),放入栈中;接下来访问b点,b此时为(2,2),放入栈中;再访问c点,c为(3,3),放入栈中;接下来再访问d点,d此时为(4,4),放入栈中。接下来就是关键点了,我们现在要输出d,d可以通过指向b的这条边访问到b,b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值