我有一个问题,我真的很挣扎。我有一组带有加权边的点,我需要创建一个最小生成树来找到所需的最短边数。我需要在java中完成它。现在我有它创建一个邻接矩阵,这就是我陷入困境的一点。我真的不知道下一步该往哪里去。任何帮助都会很棒。
答案 0 :(得分:0)
看看Kruskal和Prim算法, 我真的很喜欢Prim,因为它很容易实现和理解:http://en.wikipedia.org/wiki/Prim%27s_algorithm
关于你的问题,下一步做什么(Resumed Prim的算法): 选择一个随机顶点并以较低的成本获得边缘,将其插入到MST中。 虽然您的MST没有所有顶点: 从MST的边缘选择成本较低的边缘,并将其插入MST。
答案 1 :(得分:0)
如果尝试查找最小生成树,则边缘的数量始终相同,权重也将有所不同。我建议用于解决此问题的方法是Prim的算法。当您拥有明显的加权边时,效果最佳。即使其他人讨论了它的可能性,我也将在这里完整说明,以解决无向连接图的最小生成树问题。
Prim's的第一步是从任何顶点V开始并将其添加到(当前)空的一组称为“ Discovered”的顶点中。从那里,您将查看与V相邻的所有边缘(使用邻接矩阵),并连接到不在“ Discovered”中的顶点(使用Discovered集),并将它们添加到最小堆结构中。堆将使您占据最小的边缘,并将其添加到新的树结构中。该边缘的另一端是您的下一个新的起始顶点。重复此过程,直到您拥有最小的生成树为止。