“ Floyd-Warshall算法” 和 “ Dijkstra算法” 之间有什么区别,哪个是找到图中最短路径的最佳方法?
我需要计算网络中所有线对之间的最短路径,并将结果保存到数组中,如下所示:
**A B C D E** A 0 10 15 5 20 B 10 0 5 5 10 C 15 5 0 10 15 D 5 5 10 0 15 E 20 10 15 15 0
Dijkstra的算法可找到图中一个节点与每个其他节点之间的最短路径。您将为每个节点运行一次。权重必须为非负数,因此,如有必要,您必须首先对图形中的值进行标准化。
Floyd- Warshall一次计算所有节点对之间的最短路径!循环权重必须为非负数,并且图形必须是有 向的 (您的图表不是)。
Johnson的算法使用Dijkstra的算法在一次遍历中查找所有对,并且对于稀疏树更快(请参阅链接以进行分析)。