什么是Dijkstra的最小生成树?

时间:2018-04-08 07:17:43

标签: algorithm data-structures graph minimum-spanning-tree

我在为Dijkstra的最小生成树找到示例算法时遇到了麻烦。我已经知道Dijkstra的单最短路径算法,但不知道生成树。我从课堂上得到了简单的解释:

  

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

我在互联网上搜索过,但我找不到算法。

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

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

这是一个简单的例子:

enter image description here

该算法的工作原理如下:

  1. 图表有灰色边缘。
  2. 添加一些边而不检测圆。
  3. 添加垂直边缘后,算法会检测到圆圈。它会移除最后一条边(红色),因为它的重量最重。
  4. 添加水平边也会产生圆。由于它的重量最重,所以它会被移除。
  5. 添加最后一条边也会产生一个圆,但最后一条边增加了最重的重量。相反,必须移除重量为3的边缘。最小生成树由图(5)中的黑色边缘组成。
  6. 如果要标记访问节点,则圆检测很容易。要查找检测到的圆的最边缘,可以使用常用的圆搜索算法。

    注意:图片(5)演示了为什么有必要访问所有边缘,因为(3)已经包含生成树。但这并不是最小的。