|
沙发
楼主 |
发表于 2019-11-6 19:55:19
|
只看该作者
从1进入 dfn[1]=low[1]= ++cnt = 1
入栈 1
由1进入2 dfn[2]=low[2]= ++cnt = 2
入栈 1 2
之后由2进入4 dfn[4]=low[4]= ++cnt = 3
入栈 1 2 4
之后由4进入 6 dfn[6]=low[6]=++cnt = 4
入栈 1 2 4 6
6无出度,之后判断 dfn[6]==low[6]说明6是个强连通分量的根节点:6及6以后的点出栈并输出。
回溯到4后发现4找到了一个已经在栈中的点1,更新 low [ 4 ] = min ( low [ 4 ] , dfn [ 1 ] )
于是 low [ 4 ] = 1 .
由4继续回到2 Low[2] = min ( low [ 2 ] , low [ 4 ] ).
low[2]=1;
由2继续回到1 判断 low[1] = min ( low [ 1 ] , low [ 2 ] ).
low[1]还是 1
然后更新3的过程省略,大家可以自己手动模拟一下。
。。。。。。。。。
省略了1->3的更新过程之后,1的所有出边就跑完了
于是判断:low [ 1 ] == dfn [ 1 ] 说明以1为根节点的强连通分量已经找完了。
将栈中1以及1之后进栈的所有点,都出栈并输出。 |
|