强连通分量Korasaju算法

强联通分量指的是有向无环图中的一个子图,该子图中任意两个节点i、j,都存在i到j的路径和j到i的路径,换句话,该子图中任意两点有路径可达(不需要直接有边相连,可以通过多条边)。

对于原图G做DFS,每个节点回溯时压到一个栈里。

对原图取转置,记G'。对于G'按之前栈的次序取栈顶进行DFS,每次得到的子图就是一个强联通分量。

例子:

图G:

 按照上述步骤:

首先对原图G做dfs:

起点1:1-2,2回溯,入栈。

1-3-5-6,6回溯,入栈。

1-3-5,5回溯,入栈。

1-3-4,4回溯,入栈。

1-3,3回溯,入栈。

1,1回溯,入栈。

得到的栈为:【底】----->【顶】2-6-5-4-3-1

3.按照栈顶->栈底的顺序对于转置图G'做dfs

转置图G’:

 起点1:1-4-3

起点5:5

起点6:6

起点2:2

猜你喜欢

转载自www.cnblogs.com/FdWzy/p/12969801.html
今日推荐