我的问题是关于检测是否存在循环。我不关心循环发生在哪里,但只有在存在循环的情况下。 特别是,我正在研究(最大)生成树算法的实现。我按降序对边缘进行了排序,然后我选择了一条边并将其放入图形边缘IFF的集合中,它不会导致循环。
我发现,对于无向图,只能检查 no_of_edges> no_of_vertices - 1 。这是正确的吗?我试图找到一个不真实的案例,但我不能。当然这并不意味着这是正确的。
谢谢
答案 0 :(得分:6)
只需运行DFS搜索;它会自动检测循环,因为这是DFS的停止条件 - 当你进入一个已经在堆栈中的节点时就会停止,那就是你找到一个循环时。
答案 1 :(得分:2)
如果图形断开连接,或者两个给定节点之间有多个边缘,那么您的想法就会失败。如果您规定任何两个节点之间最多只有一条边,那么您仍然需要检查连通性。
但是,是的,如果连接图中的边数< =顶点数-1,那么就没有周期。
答案 2 :(得分:0)
基本上说你的想法是正确的。但可能存在一些陷阱:
1)首先运行DFS并找到所有连接的组件,检查所有连接组件中的条件 no_of_edges< = no_of_vertices - 1 。
2)检查每个连接的组件是否包含多个边。