// instantiate the iterator
ClosestFirstIterator<V,E> it = new ClosestFirstIterator<V,E>(graph, start_vertex);
// iterate to build the tree
while(it.hasNext())
it.next();
// query
double distance = getShortestPathLength(vertex);
E next_edge = getSpanningTreeEdge(vertex);
# 1 楼答案
不幸的是,我不知道足够的图论来给你一个完整的,直接的答案,但我已经在一些项目中使用了jgrapht,所以这可能会有所帮助
jgrapht中包含的算法列表如下:http://www.jgrapht.org/javadoc/org/jgrapht/alg/package-summary.html,您也可以在这里找到作为迭代器实现的图遍历(如果有帮助的话):http://www.jgrapht.org/javadoc/org/jgrapht/traverse/package-summary.html
我很确定这些算法都不会让你想从盒子里拿出来,所以你必须自己编码,但我可以从经验告诉你,在jgrapht之上编码要比从头开始容易得多。还有一个FibonacciHeap类可能有助于实现Prim的算法
如果您需要有关算法本身的帮助,那么有许多包含Wikipedia条目的算法,有详细的描述和伪代码。{a4}链接到它们
# 2 楼答案
JGraphT库的最新版本为MST算法提供了多种选择,无需从头实现
以下代码适用于Java8和JGraphT版本1.3.0。它使用(a)Prim,(b)Kruskal和(c)Borůvka的算法计算一个小图的最小生成树。关于不同算法的详细信息可以在维基百科关于mst problem的文章中找到
# 3 楼答案
Jung实现了这一点
# 4 楼答案
ClosestFirstIterator可能会帮助你。它在迭代顶点时使用FibonacciHeap构建生成树
ClosestFirstIterator提供了getShortestPathLength()和getSpanningTreeEdge()方法来获取最小生成树的一部分