参考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
,但我再次确定最好的方法是做什么。我在考虑一系列记录,包括to
,from
和weight
,但我迷失在forest
上。
最后,我试图找出我是如何知道一条边是否连接两棵树,但我又不确定最好的方法是做什么。
答案 0 :(得分:3)
我可以看到他们的算法描述会让你感到困惑,如何开始。它让我以同样的方式离开了。
我建议您阅读后来的Example section。这使得如何继续进行非常清楚,并且你可能想出了你需要的数据结构。
看起来基本的想法如下:
答案 1 :(得分:2)
“创建森林部分”实际上意味着:从页面Disjoint-set data structure实现伪代码。如果您可以阅读C ++,那么我有一个非常简单的实现here。 (该实现有效,我用它来实现Kruskal的算法:)