检测无向图中是否存在循环

时间:2011-11-16 00:10:40

标签: algorithm graph-algorithm

我的问题是关于检测是否存在循环。我不关心循环发生在哪里,但只有在存在循环的情况下。 特别是,我正在研究(最大)生成树算法的实现。我按降序对边缘进行了排序,然后我选择了一条边并将其放入图形边缘IFF的集合中,它不会导致循环。

我发现,对于无向图,只能检查 no_of_edges> no_of_vertices - 1 。这是正确的吗?我试图找到一个不真实的案例,但我不能。当然这并不意味着这是正确的。

谢谢

3 个答案:

答案 0 :(得分:6)

只需运行DFS搜索;它会自动检测循环,因为这是DFS的停止条件 - 当你进入一个已经在堆栈中的节点时就会停止,那就是你找到一个循环时。

答案 1 :(得分:2)

如果图形断开连接,或者两个给定节点之间有多个边缘,那么您的想法就会失败。如果您规定任何两个节点之间最多只有一条边,那么您仍然需要检查连通性。

但是,是的,如果连接图中的边数< =顶点数-1,那么就没有周期。

答案 2 :(得分:0)

基本上说你的想法是正确的。但可能存在一些陷阱:

1)首先运行DFS并找到所有连接的组件,检查所有连接组件中的条件 no_of_edges< = no_of_vertices - 1

2)检查每个连接的组件是否包含多个边。