在Ada中实现Kruskal的算法,不知道从哪里开始

时间:2011-10-17 02:20:49

标签: algorithm graph ada minimum-spanning-tree kruskals-algorithm

参考Ada中的Kruskal's algorithm,我不知道从哪里开始。

在我实际编写程序之前,我正在考虑所有内容,但我很遗憾应该使用哪些数据结构以及如何表示所有内容。

我原来的想法是在邻接列表中表示完整的树,但是阅读维基百科的算法说明为create a forest F (a set of trees), where each vertex in the graph is a separate tree并且我不确定如何实现这一点而不会很快变得非常混乱。

它要做的下一件事是create a set S containing all the edges in the graph,但我再次确定最好的方法是做什么。我在考虑一系列记录,包括tofromweight,但我迷失在forest上。

最后,我试图找出我是如何知道一条边是否连接两棵树,但我又不确定最好的方法是做什么。

2 个答案:

答案 0 :(得分:3)

我可以看到他们的算法描述会让你感到困惑,如何开始。它让我以同样的方式离开了。

我建议您阅读后来的Example section。这使得如何继续进行非常清楚,并且你可能想出了你需要的数据结构。

看起来基本的想法如下:

  • 获取图表,找到引入至少一个新顶点的最短边,并将其放入“生成树”中。
  • 重复上述步骤,直到您拥有每个顶点。

答案 1 :(得分:2)

“创建森林部分”实际上意味着:从页面Disjoint-set data structure实现伪代码。如果您可以阅读C ++,那么我有一个非常简单的实现here。 (该实现有效,我用它来实现Kruskal的算法:)