【问题标题】:Detect if there exists a cycle in an undirected graph检测无向图中是否存在环
【发布时间】:2011-11-16 00:10:40
【问题描述】:

我的问题是关于检测是否存在循环。我不在乎循环发生在哪里,但前提是存在循环。 特别是,我正在研究(最大)生成树算法的实现。我已经按降序对边缘进行了排序,然后我当时选择一个边缘并将其放入图形边缘的集合中,如果它不会导致循环。

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

谢谢

【问题讨论】:

标签: algorithm graph-algorithm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果图是断开的,或者两个给定节点之间有不止一条边,那么你的想法就失败了。如果你规定任意两个节点之间最多有一条边,那么你仍然需要检查连通性。

    但是是的,如果连接图中的边数

    【讨论】:

    • 对……你说得对。任何节点之间最多只有一条边,所以我必须检查连通性。
    【解决方案3】:

    基本上你的想法是正确的。但可能会有一些陷阱:

    1) 首先运行一个DFS,找到所有连通分量,检查所有连通分量中是否满足no_of_edges 。

    2) 检查每个连通分量是否包含多条边。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 2012-02-14
      相关资源
      最近更新 更多