如何查找从一个SCC到另一个SCC的路径?

时间:2017-11-04 21:17:13

标签: algorithm strongly-connected-graph

对于图表,在找到强连接组件后,如何找到彼此具有路径的SCC数量?我想知道SCC1是否有通往SCC2的路径。

3 个答案:

答案 0 :(得分:1)

你问了两件事:

如何找到彼此之间有路径的SCC数量?

您可以从每个SCC运行dfs并保存您可以访问的SCC。

例如:您从SCC A运行dfs,您可以访问SCC B和C.(只需检查您正在访问的节点的SCC是什么) 然后你从另一个SCC D运行dfs并且你到达SCC A.此时你可以停止你的dfs,因为你已经计算了其他的。

因此时间复杂度为O(n + m)

答案 1 :(得分:0)

假设您只需要知道SCC是否可以从另一个SCC访问(true / false),您可以在发现一个SCC时为每个SCC分配一个标识,并为其所属的SCC_ID创建一个映射。 。然后再次遍历原始图形。如果存在(u,v)的边SCC_ID(u) != SCC_ID(v),那么可以从另一边获得SCC。

类似的问题:Kosaraju's Algorithm for finding SCCs but keep track of edge between SCCs?

答案 2 :(得分:0)

在使用 Kosaraju 查找 SCC 时(因为它易于实施),为每个 SCC 发现者(也称为代表)分配一个唯一 ID,并为每个 SCC 将其 ID 分配给其所有成员。这将有助于记住哪个成员属于哪个 SCC。现在这些信息可以帮助我们将这个图压缩成一个图,其节点是每个 SCC(代表 ID)。在构建此压缩图时,您将知道哪个 SCC 连接到哪个。
您可以参考此链接了解更多详细信息以及实施:https://cp-algorithms.com/graph/strongly-connected-components.html