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



参考Kruskal在Ada中的算法,我不知道从哪里开始。

在我实际写程序之前,我试图把所有的事情都考虑清楚,但是对于我应该使用什么数据结构以及如何表示所有的事情,我很困惑。

我最初的想法是在邻接表中表示完整的树,但是阅读维基百科的算法状态为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, fromweight,但我在forest上迷路了。

最后,我想弄清楚如何知道一条边是否连接了两棵树,但我也不确定做这一切的最佳方法是什么

我可以看到他们的算法描述会让你困惑的地方,因为如何开始。它就这样离开了我。

我建议阅读后面的示例部分。这使得如何进行变得非常清楚,并且您可能可以从中想出执行该操作所需的数据结构。

看起来基本思想是这样的:

  • 取图,找到引入至少一个新顶点的最短边,并将其放入"生成树"中。重复上面的步骤,直到你有每个顶点。

"创建森林部分"的真正含义是:从页面Disjoint-set数据结构实现伪代码。如果你能读懂c++,那么我在这里有一个非常简单的实现。(这个实现是有效的,我自己用它来实现Kruskal的算法:)

相关内容

最新更新