使用强连接组件Algo作为周期检测

时间:2012-10-18 16:54:30

标签: algorithm graph

据我所知,如果一组顶点是强连通分量的一部分,那么组件中的所有顶点都可以相互到达;一个循环。

现在,我想使用这个事实并声称如果图G =(V,E)有一个周期,那么该周期必须在scc内。

换句话说,所有周期都必须是scc的一部分(我的主张)。

我无法想到我的主张的任何反例,所以我想知道图表中是否有任何不属于scc的周期。
要么 是我的主张,对吗?

2 个答案:

答案 0 :(得分:9)

这是对的。如果一组顶点在一个循环中,那么它们都可以相互到达(通过循环),因此它们是SCC的定义。

话虽如此,这并不是一个编程问题:)

答案 1 :(得分:1)

设e =(u,v)为有问题的边缘。我们注意到,这是一个包含e的循环,只有当前 如果你在G {e}连接到v。 我们的算法仅在G {e}上从u运行DFS,如果v可从u到达则输出yes 否则没有。 当DFS以线性时间运行时,该算法以线性时间运行(并且我们仅运行部分算法 DFS算法查找包含u)的组件。这个算法显然是正确的。 如果u通过某个路径p连接到G {e}中的v,我们可以将边e添加到p以形成循环。 否则,从G中删除e会断开u和v。