有没有办法快速找到无向/有向图中循环(后边)一部分的所有边?

时间:2013-12-09 13:10:46

标签: c++ algorithm graph minimum-spanning-tree

我有一棵最小的生成树。我为它添加了一个优势。肯定会形成一个循环。我需要找到属于该循环的所有边缘,即所有后边缘。这有多快可以做到?我的解决方案 例如,如果它是边缘(1,4),则在所有位置向Adj(1)添加4并每次运行dfs。例如。如果Adj(1)有2,3,5,首先在2之前加4,运行DFS。我会得到一个后卫。然后在2和3之间添加4并运行dfs。我得到了另一个优势。然后是3到5之间,依此类推。有没有更快的方法呢?

2 个答案:

答案 0 :(得分:3)

在树中,您在任何一对顶点之间都有一条(简单)路线。如果要添加边(i,j),首先在i和j之间找到树中的路径,然后你将得到你的周期 - 它包含该路径中的所有顶点(并在你添加{后变成一个循环) {1}}作为边缘)。

答案 1 :(得分:0)

您正在寻找图表中强关联的组件,可以使用Tarjan's algorithmamong others)找到。