代码之家  ›  专栏  ›  技术社区  ›  Marcus Kim

Dijkstra的最小生成树是什么?

  •  4
  • Marcus Kim  · 技术社区  · 6 年前

    我很难找到Dijkstra最小生成树的示例算法。我已经知道Dijkstra的单最短路径算法,但不知道生成树。我从课堂上得到了一个简单的解释:

    对于每条边,将其添加到树中。如果检测到循环,则移除最重的边缘。

    我在互联网上搜遍了,找不到它的算法。

    我可能需要自己编写代码,但我想我会问是否有人有一个好的例子。

    有人能帮忙吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   clemens    6 年前

    下面是一个简单的示例:

    enter image description here

    该算法的工作原理如下:

    1. 图形具有灰色边。
    2. 添加一些边而不检测圆。
    3. 在添加垂直边缘后,该算法检测到一个圆。它会删除最后一条边(红色),因为它的重量最大。
    4. 添加水平边也会生成一个圆。因为它的重量最大,所以它被移除了。
    5. 添加最后一条边也会生成一个圆,但添加的最后一条边的权重不是最大的。相反,必须移除重量为3的边缘。最小生成树由图(5)中的黑色边组成。

    如果正在标记访问节点,则圆检测很容易。要查找检测到的圆的最重边,请使用常见的圆搜索算法。

    笔记 :图(5)说明了为什么需要访问所有边,因为(3)已经包含生成树。但这并不是最小的。