【问题标题】:Kruskal's Algorithm : What is the Algorithm to check if the edges of the graph form a loop or not?Kruskal 算法:检查图的边缘是否形成循环的算法是什么?
【发布时间】:2014-01-21 10:27:42
【问题描述】:

有人可以提供有关如何检查图形边缘是否形成循环的信息吗? 任何信息都会非常有帮助。 非常感谢。

【问题讨论】:

  • 对我来说听起来像是欧拉路径。除非 Q 没有要求“算法来检查图形的所有边缘是否形成循环”。

标签: algorithm greedy kruskals-algorithm


【解决方案1】:

Kruskal 算法(您用它来标记问题)使用 disjoint set data structure 初始化每个顶点的不相交集。然后,对于每条边,边的顶点所属的两个集合被合并。如果这两个顶点已经在同一个集合中,那么您已经找到了一个循环。如果每次发生边缘时都删除它,您将得到一棵生成树。如果按照权重升序对边进行排序,那将是最小生成树。

如果您只需要知道图是否包含循环,请使用更简单的 DFS - 如果任何节点具有已访问过的相邻节点(父节点除外) - 您已找到循环。

【讨论】:

    【解决方案2】:

    在图上做一个完整的 DFS。为图中的每个节点维护两个布尔变量,“已访问”和“已完成”。 “visited”表示顶点是否已被访问,“completed”表示从该特定节点开始的 DFS 是否已完成。如果在做 DFS 时碰到了一个已经被访问过但 DFS 还没有完成的节点,那么图中存在一个循环。

    【讨论】:

    • 虽然是正确的答案,但由于时间复杂度较高而没有用于高效的 kruskal 工具
    【解决方案3】:

    它是使用快速联合查找数据结构来检查要连接的边是否不在同一个集群的顶点之间。

    Union-Find Datastructures

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2016-09-07
      • 2010-11-09
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      相关资源
      最近更新 更多