请问数据结构中图的强连通分量是什么?能具体解释一下吗?

如题所述

有向图的极大强连通子图,称为强连通分量(strongly connected components)。

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

扩展资料: 

强连通分量Tarjan算法

任何一个强连通分量,必定是对原图的深度优先搜索树的子树。那么只要确定每个强连通分量的子树的根,然后根据这些根从树的最低层开始,一个一个的拿出强连通分量即可。

维护两个数组,一个是indx[1..n],一个是mlik[1..n],其中indx[i]表示顶点i开始访问时间,mlik[i]为与顶点i邻接的顶点未删除顶点j的mlik[j]和mlik[i]的最小值(mlik[i]初始化为indx[i])。这样,在一次深搜的回溯过程中,如果发现mlik[i]==indx[i]那么,当前顶点就是一个强连通分量的根。

因为如果它不是强连通分量的根,那么它一定是属于另一个强连通分量,而且它的根是当前顶点的祖宗,那么存在包含当前顶点的到其祖宗的回路,可知mlik[i]一定被更改为一个比indx[i]更小的值。

至于拿出强连通分量,如果当前节点为一个强连通分量的根,那么它的强连通分量一定是以该根为根节点的(剩下节点)子树。在深度优先遍历的时候维护一个堆栈,每次访问一个新节点,就压入堆栈。

这样,由于当前节点是这个强连通分量中最先被压入堆栈的,那么在当前节点以后压入堆栈的并且仍在堆栈中的节点都属于这个强连通分量。

可以用反证法证明这个做法的正确性。假设一个节点在当前节点压入堆栈以后压入并且还存在,同时它不属于该强连通分量,那么它一定属于另一个强连通分量,但当前节点是它的根的祖宗,那么这个强连通分量应该在此之前已经被拿出。

参考资料来源:百度百科-强连通分量    

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-26

强连通分量是有向图中的概念,就是每一个顶点到其它点都由路径,注意有方向。

step1:对原图G进行深度优先遍历,记录每个节点的离开时间。

step2:选择具有最晚离开时间的顶点,对反图GT进行遍历,删除能够遍历到的顶点,这些顶点构成一个强连通分量。

step3:如果还有顶点没有删除,继续step2,否则算法结束。

如果把求出来的每个强连通分量收缩成一个点,并且用求出每个强连通分量的顺序来标记收缩后的节点,那么这个顺序其实就是强连通分量收缩成点后形成的有向无环图的拓扑序列。

扩展资料:

Kosaraju算法的第二次深搜隐藏了一个拓扑性质,而Tarjan算法和Gabow算法省略了第二次深搜,所以,它们不具有拓扑性质。

Tarjan算法用堆栈和标记,Gabow用两个堆栈(其中一个堆栈的实质是代替了Tarjan算法的标记部分)来代替Kosaraju算法的第二次深搜,所以只用一次深搜,效率比Kosaraju算法要高。

在这个节点访问之前,能够构成强连通分量的那些节点已经被弹出了,这个对Tarjan算法有了解的都应该清楚,那么Tarjan算法中的判断根我们用什么来代替呢?想想,其实就是看看第二个堆栈的顶元素是不是当前顶点就可以了。

参考资料来源:百度百科——强连通分量

本回答被网友采纳
第2个回答  推荐于2017-08-04
强连通分量是有向图中的概念,就是每一个顶点到其它点都由路径,注意有方向追问

那它的强连通分量是什么?

追答

首先先说下定义,再来看你的题,注意三个概念:
1:两个顶点的强连通;
2:极大强连通子图,即强连通分量;
3:强连通图;
定义:有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。
现在看看你的题,首先,看到定点4只有进的路径,没有出的路径,所以4不存在和其它顶点的强连通,除去顶点4,再看其它的,当除去顶点4之后,发现顶点1也是只有进路没有出路,所以除去顶点1,剩下的顶点2,3,5,6中,每个顶点到其它顶点都有路径,所以它就是一个极大强连通子图,即就是强连通分量

本回答被提问者和网友采纳
第3个回答  2017-06-13
强连通分量是有向图中的概念,就是每一个顶点到其它点都由路径,注意有方向
第4个回答  2019-12-21
有向图的极大强连通子图,称为强连通分量(strongly connected components)。
相似回答