Floyd:求多源、无负权边的最短路。用矩阵记录图。时效性较差,时间复杂度O(V^3)。
Dijkstra:求单源、无负权的最短路。时效性较好,时间复杂度O(V^2)。可以用堆优化。
Bellman-Ford:求单源最短路,可以判断有无负权回路(若有,则不存在最短路),时效性较好,时间复杂度O(VE)。
SPFA:是Bellman-Ford的队列优化,时效性相对好,时间复杂度O(kE)。(k<<V)。
宽搜:求单源无权最短路。矩阵记录法时间复杂度O(V^2);边表记录法时间复杂度O(kE)。
稠密图单源有负权最短路:SPFA。
Dijkstra:求单源、无负权的最短路。时效性较好,时间复杂度O(V^2)。可以用堆优化。
Bellman-Ford:求单源最短路,可以判断有无负权回路(若有,则不存在最短路),时效性较好,时间复杂度O(VE)。
SPFA:是Bellman-Ford的队列优化,时效性相对好,时间复杂度O(kE)。(k<<V)。
宽搜:求单源无权最短路。矩阵记录法时间复杂度O(V^2);边表记录法时间复杂度O(kE)。
稠密图单源无负权最短路:Dijkstra。
稠密图单源有负权最短路:SPFA。
稀疏图单源最短路:SPFA或Bellman-Ford。
多源无权最短路:宽搜。
从竞赛的角度来说的话,bellman-Ford时间复杂度太高,SPFA虽然很快但是不稳定,Dijstra+堆是最稳定的但是编程复杂度太高。一般竞赛时为追求稳定使用最后者,平时SPFA表现极好。