JGraphT有许多最短路径的实现(dijkstra、belman ford等)
我需要一个未加权图的单一源最短路径。
以下是我的问题(针对JGraphT):
首先,我假设对未加权图使用Dijkstra是浪费的(使用的优先级队列比BFS使用的常规队列的队列deque慢,并且由于未加权图上的所有权重都是1,所以这实际上并没有增加任何值)我的假设正确吗?
假设1的答案是“是”,那么我假设我将使用BreadthFirstIterator
而不是滚动我自己的(单元测试,和简单的bfs一样,我肯定我会有一些角大小写错误,甚至java的二进制搜索有一个整数溢出感谢josh bloch自己介绍的一个错误,直到2006年才解决!)但是问题是,从一个原始的bfs到实际获得单源最短路径还有一小步要走,我应该编写自己的UnweightedSingleSourceShortestPaths
类吗?或者有一个隐藏在jgrapht核心库中,我可以直接插入吗?
最佳答案
因为我认为我找到了第二个问题的答案,我认为它也回答了第一个问题(如果jgraft的dijkstra对于所有权重=1的简单情况是最有效的,那么cdk为什么要创建自己的呢?)
这里是2的答案-是的,有一个开源(lgpl)解决方案:https://github.com/cdk/cdk/blob/master/legacy/src/main/java/org/openscience/cdk/graph/BFSShortestPath.java