我在C(www.bubblellicious.es/prim.tar.gz)中实现了Prim's algorithm,但我只是想知道如何将其转换为Kruskal's algorithm。
看起来它们非常相似,但我无法想象如何将旧代码修改为新代码。如果你给出一些建议或东西,它会很好吃。我知道这很简单,但我仍然是C编程中的n00b ......
答案 0 :(得分:5)
为什么不从头开始编写Kruskal,看看他们如何在自己的解决方案中进行比较?最好的学习方式。
答案 1 :(得分:1)
要进行转换,您需要一个林(即最初每个节点都是树的一组树)作为临时输出结构而不是单个树。然后在每一步,而不是找到最便宜的顶点,将当前未连接的节点添加到树中,您可以在图中找到最便宜的边,如果它创建一个新树(即连接两个以前未连接的节点),则将该树添加到森林和删除源树。否则丢弃边缘。 Kruskal的正确实现比内存密集更多,但比正确的Prim实现更少的时间密集。
但两者之间的差异非常大。你可以保持的是一些辅助函数和一些数据结构。不是转换,更多是使用更高级别构建块的重写。
答案 2 :(得分:0)
为什么不考虑切换到C ++并使用boost图库 (http://www.boost.org/)?
它包含两种算法的非常好的实现。类型安全且高性能。 请参阅kruskal_minimum_spanning_tree和prim_minimum_spanning_tree