具有顶点权重和边权重的最小Spanninjg树

时间:2017-04-18 22:57:43

标签: algorithm graph minimum-spanning-tree

我遇到了解决最小生成树问题的麻烦。因此,图中的每个节点都是城市,并且可能具有连接两个节点的权重边,这是在两个城市之间建立道路的成本。问题基本上是告诉建设道路的最低成本,并且所有城市都以某种方式连接起来。我可以通过使用Prim或kruskal算法来解决这个问题,从而解决这个问题。

现在出现了棘手的部分:每个城市(节点)都有一个机场,每个机场都有一次性费用(如果你决定建造它)。如果两个城市都有机场,您可以使用机场在两个城市之间旅行。现在我必须计算建设道路和机场的最低成本,以便让所有城市连接起来,但我很难用机场的其余部分来表示与机场的连接。有人可以帮我吗?也许我使用MST完全错了?

我提出的唯一解决方案是:对于每个拥有机场的城市,我会将该城市与另一个拥有机场的城市连接起来。此外,如果建造两个机场的成本较低,那么建设一条道路我会考虑到这一点。我跑kruskal是为了获得最便宜的优势,但是如果kruskal选择了一个"机场"边缘,我将它添加到生成树,然后0两个机场的成本(如果他们没有在过去建立)。我相信,通过在运行kruskal时进行这种动态的重量变化,我破坏了获得最低成本的想法。

1 个答案:

答案 0 :(得分:3)

有两种可能性:

1)最佳解决方案不使用机场。在这种情况下,您可以忽略机场并像往常一样构建最小生成树。

2)最佳解决方案使用机场。在这种情况下,将一个虚拟节点添加到名为" sky"的图形中。从任何城市到天空建设道路的成本"是建造机场的成本。使用机场的最优解决方案的成本是此修订图中最小生成树的成本。

所以尝试两种选择并选择最低成本。