强连通分量怎么写

1.请问数据结构中图的强连通分量是什么

有向图的极大强连通子图,称为强连通分量(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]更小的值。

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

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

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

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

2.强连通分量的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]更小的值。

至于如何拿出强连通分量,这个其实很简单,如果当前节点为一个强连通分量的根,那么它的强连通分量一定是以该根为根节点的(剩下节点)子树。在深度优先遍历的时候维护一个堆栈,每次访问一个新节点,就压入堆栈。现 在知道如何拿出了强连通分量了吧?是的,因为当前节点是这个强连通分量中最先被压入堆栈的,那么在当前节点以后压入堆栈的并且仍在堆栈中的节点都属于这个强连通分量。当然有人会问真的吗?假设一个节点在当前节点压入堆栈以后压入并且还存在,同时它不属于该强连通分量,那么它一定属于另一个强连通分量,但当前节点是它的根的祖宗,那么这个强连通分量应该在此之前已经被拿出。现 在没有疑问了吧,那么算法介绍就完了。

3.请问如何求(有向/无向)图的强连通分量,还有,基础一点,怎么求有

求强连通分量的算法有tarjan和kosaraju 两种算法

相较之下 tarjan写起来比较简单 Kosaraju比较麻烦

但是想起来 Kosaraju比较简单

其他求强连通分量的算法 要是还有的话 估计就是需要更高深的数据结构的算法了

建议还是学下tarjan 因为他可以帮你做很多事 比如 求桥 求割点 缩环 而且写起来也很简单

连通图的求法可以直接DFS 每次DFS到一个点 就把它记录成已到达 然后继续向下搜索 每次DFS就可以求出一个连通图

附上tarjan的代码

var

next,head,point:array[1..1000] of longint;

time,tot,i,j,n,m,x,y,t:longint;

v:array[1..10000] of byte;

f,z,q:array[1..1000] of longint;

low,rea:array[1..10000] of longint;

function min(x,y:longint):longint;

begin

if xend;

procedure add(x,y:longint);

begin

inc(tot);

next[tot]:=head[x];

head[x]:=tot;

point[tot]:=y;

end;

procedure dfs(x:Longint);

var

i,j:longint;

begin

inc(time);

low[x]:=time;

rea[x]:=time;

v[x]:=1;

inc(t);

z[t]:=x;

j:=head[x];

while j0 do

begin

if v[point[j]]=0 then dfs(point[j]);

if v[point[j]]j:=next[j];

end;

if low[x]=rea[x] then

begin

inc(tot);

while z[t+1]x do

begin

inc(q[tot]);

f[z[t]]:=tot;

v[z[t]]:=2;

dec(t);

end;

end;

end;

begin

readln(n,m);

for i:=1 to m do

begin

readln(x,y);

add(x,y);

end;

tot:=0; time:=0;

for i:=1 to n do

if v[i]=0 then dfs(i);

//writeln(tot);

for i:=1 to n do

if q[f[i]]1 then writeln('T') else writeln('F');

end.

强连通分量怎么写

转载请注明出处育才学习网 » 强连通分量怎么写

知识

七点眼泪拼音怎么写

阅读(199)

本文主要为您介绍七点眼泪拼音怎么写,内容包括七字的拼音怎么写,眼泪的拼音是什么,一千滴真心眼泪的拼音怎么写。七的拼音是:【qī】释义:数名,六加一(在钞票和单据上常用大写“柒”代)。文体名,或称“七体”,为赋体的另一种形式。旧时人死后每隔

知识

楼房的地址应怎么写

阅读(222)

本文主要为您介绍楼房的地址应怎么写,内容包括谁知道这个住址跟住宅怎么填,网购的地址怎么填,我这里是乡下不是楼房,住哪个小区怎么填写楼房。寄信回国的话,中国写China,省份是拼音,然后城市也是拼音。之后的细节你就写中文,因为你在国外写Chin

知识

龙的繁体字分开怎么写

阅读(258)

本文主要为您介绍龙的繁体字分开怎么写,内容包括龙的繁体字怎么写,龙的繁体字如何写,龙的繁体字怎么写。龙的繁体字:

知识

个性签名的句子怎么写

阅读(252)

本文主要为您介绍个性签名的句子怎么写,内容包括非常优美的可以发个性签名的句子谢谢啦,个性签名短句经典,要几句唯美、短一点的可以做个性签名的句子。莪们旳身后,是遍地忧伤旳阳光,影子在上面舞蹈。 2、夕阳西下一抹金色映洒满整个海面,这一

知识

初中家校联系表怎么写

阅读(385)

本文主要为您介绍初中家校联系表怎么写,内容包括初中生家长如何写家校联系册,初中生家校联系本怎么写,家校联系册家长应该写什么话呢。张老师,您好!最近一周开始明显感觉到孩子长大了、懂事了。很想感谢张老师及科任老师对她个性的启发和引导

知识

怎么保存java代码怎么写

阅读(237)

本文主要为您介绍怎么保存java代码怎么写,内容包括JAVA中添加的信息保存代码怎么写就是我写了个程序可以添加新的信,java怎么写代码才能保存从键盘输入的用户名和密码,文本编辑器编写Java代码应该怎样保存。import java.util.Scanner;publi

知识

再审审查报告怎么写

阅读(238)

本文主要为您介绍再审审查报告怎么写,内容包括怎样写再审申请书,再审申请书范本怎么写,再审申请书怎么写。提出再审申请时,能提交一份结构清晰,内容重点突出,法律关系准确,说理翔实明了的再审申请书,将起到事半功倍的效果。 根据民诉法和审判监

知识

日本话懒字怎么写

阅读(189)

本文主要为您介绍日本话懒字怎么写,内容包括日语懒怎么说,日本话我爱你怎么说用日本字怎么写,日本的字怎么写。说的简单一点,随便一点就是爱してる(あいしてる)(aisiteru)(阿一西太鲁)(只是“爱”的意思,日本人常用)说的郑重一点,可以说私

知识

彝族语言你好怎么写

阅读(470)

本文主要为您介绍彝族语言你好怎么写,内容包括彝语“你好”怎么说,彝语,你好怎么说,彝族语我爱你怎么写。我爱你的彝文写法是这样的:ꉢꆏꉂ(nga ne mgu)。彝族文字为表意文字,又称音节文字,史书中称“爨文”、“韪书” ,或“罗罗文”、

知识

一年写日记通知怎么写

阅读(255)

本文主要为您介绍一年写日记通知怎么写,内容包括小学生一年级写日记怎么写,小学一年级日记怎么写,日记、留言条、通知、书信等的格式和例文。日记就是每天记录你自己一天生活中比较有意义的事情或者比较重要的事情。每天写日记有助于我们写

知识

怎么给外国人写问候信

阅读(330)

本文主要为您介绍怎么给外国人写问候信,内容包括给老外的节日问候信怎么写,给外国人写信用的问候语,谁有发给老外的节日问候信。Helloxx:I am very happy to write a letter to you .Please accept my s

知识

早晨末尾怎么写

阅读(213)

本文主要为您介绍早晨末尾怎么写,内容包括早晨作文的结尾怎么写,早晨的校园作文结尾怎么写,乡村的早晨作文结尾怎么写。当微风轻柔地托起一丝丝柳絮的时候;当太阳把它金色的光辉悄然披在一棵棵俊俏的樱花树上的时候;当美丽的花瓣在空中悠悠地

知识

报胖胖字怎么写

阅读(189)

本文主要为您介绍报胖胖字怎么写,内容包括手绘pop胖胖字要怎么写,生活中的传统文化用胖胖字怎么写,手绘POP胖胖字体到底要怎么写啊。

知识

冰箱词语怎么写

阅读(217)

本文主要为您介绍冰箱词语怎么写,内容包括形容冰箱的词语,形容电冰箱的词语,冰箱拼音怎么写。冰箱的英语:fridge读音:英 [frɪdʒ] 美 [frɪdʒ] n. 电冰箱词汇搭配fridge-freezer 双门冰箱2、fr

知识

分量怎么写

阅读(140)

本文主要为您介绍分量怎么写,内容包括细节的分量作文怎么写,命题作文《分量》怎么写,同学录上的赠言怎么写才能显得有分量呢。今天早上上班的时候,正赶上大雨,哗哗的雨滴落在地上溅起一个个大大的水泡。尽管如此,路上也有不少撑着伞迈着匆匆脚

知识

连通器水位随时间变化的方程是什么形式的为什么

阅读(239)

几个底部互相连通的容器,注入同一种液体,在液体不流动时连通器内各容器的液面总是保持在同一水平面上。连通器的原理可用液体压强来解释。若在U形玻璃管中装有同一种液体,在连通器的底部正中设想有一个小液片AB。假如液体是静止不流动的。

知识

ppp服务器连通状态失败

阅读(211)

PPP服务器连接失败有以下故障造成:1.运行商的上网方式不同,宽带账号要用PPPOE,无宽带账号要选择动态IP;2.方式选择错误或者宽带账号和密码输入错误。可以通过以下方式重新设置无线路由器:1.无线路由器插上电,把无线路由器恢复出厂;2.电脑连接无

知识

色差分量接口线怎么连

阅读(269)

色差分量接口线连接方法:1.绿色线:接到电视的Y信号接口,包含同步和绿色信号;2.蓝色线:接到电视的Cb信号接口,包含图像的蓝色;3.红色线:接到电视的Cr信号接口,包含图像的红色;4.黄色和黑色信号线一般是左右声道的模拟声音输出,接到电视YCbCr对应的音

知识

分量十足还是分量实足请语文高手来解答一下

阅读(3986)

1.十足:达到充足的程度或完全的地步。例如:神气十足、十足的理由。2.实足:属性词,意思是确实足数的。例如:实足年龄、实足一百人。3.二者都表示足,但“足”的度不同.“实足”是实际上足够、确实足够的意思,指足数,如:今天参加义务劳动的实足五

知识

如何判断周期信号中是否有基波分量

阅读(256)

周期信号一定有基波分量。方法是对它进行傅里叶变换,即可。在非正弦的周期性振荡中,包含基波和谐波。和该振荡周期相等的正弦波分量称为基波分量。相应于这个周期的频率称为基波频率。频率等于基波频率的整倍数的正弦波分量称为谐波。

知识

怎样煮驴肉不丢分量

阅读(225)

清炖驴肉可使驴肉不失分量。食材:驴肉1千克、油10克、盐30克、料酒5克、大料20克、葱10克、姜10克、生抽20克、老抽30克、白糖20克。煮驴肉的步骤:1.驴肉用凉水浸泡5至6小时;2.驴肉切块;3.再次浸驴肉1分钟;4.撇去浮沫、捞出;5.锅中放少量的油

知识

什么叫对称分量法它有何用处

阅读(398)

对称分量法是电工中分析对称系统不对称运行状态的一种基本方法。电力系统正常运行时可认为是对称的,即各元件三相阻抗相同,各自三相电压、电流大小相等,具有正常相序。对称分量法由加拿大电气学家CharlesLeGeytFortescue发明于1918年。用途

[/e:loop]