使用Dijkstra算法的最小生成树

时间:2019-02-05 10:10:10

标签: c++ dijkstra minimum-spanning-tree

我有一个图形,上面有成本和字母。我的任务不是找到从一个节点到另一个节点的最佳路径,而是找到最小的生成树。

为此我做了一张桌子,并标记了那棵树的最佳路径。

enter image description here

enter image description here

但是我不知道我是否应该从K节点进一步移动到另一个节点。尽管如此,目的不是找到从A到K的最佳路径,而是找到MST。

3 个答案:

答案 0 :(得分:1)

Dijkstra不能用于找到图形的MST。这是一种贪婪算法,可找到节点之间的最短路径。因此,尽管它使从一个节点到另一个节点的成本降到最低,但它并不总是为整个图生成MST。 Dijkstra边缘的总重量可能不等于MST的总重量。

答案 1 :(得分:0)

Dijkstra的算法本身无法准确找到图形的最小生成树。它旨在找到从源顶点到图形中所有其他顶点的最短路径。因此,在每一步,Dijkstra的算法都会贪婪地选择最接近源顶点的下一条边。它一直持续到源顶点连接到图中的每个其他顶点为止。因此,在每个步骤中,生成的当前图都是前一图的生成树,但是由于仅考虑了与源顶点有关的顶点,因此边权重之和未最小化。

但是,用于生成最小生成树的Prim算法在程序上与Dijkstra算法非常相似。但是,在每个步骤中,它没有贪婪地选择与当前顶点最小的下一条边,而是贪婪地选择与该步骤中最小生成树(当前正在生成的图形)中当前任何顶点最近的下一条边。 / p>

答案 2 :(得分:0)

使用boost::graph库。请参阅目录here。特别是,它包含算法Kruskal minimum spannig treePrim minimum spannig tree