弗洛伊德算法(Floyd)主要针对多源最短路径,且可以解决路径中有负权的情况(不包含负权回路),但是迪杰斯特拉算法只能解决正权值的单源最短路径(可以迭代多次求多源)。 |
1.弗洛伊德算法的基本思想
弗洛伊德算法从图的带权邻接矩阵cost
出发,
假设求从顶点viv_{i}vi到vjv_{j}vj的最短路径:
如果从viv_{i}vi到vjv_{j}vj有弧,则从viv_{i}vi到vjv_{j}vj存在一条长度为arcs[i][j]
的路径,但是不一定是最短的,还需进行n
次试探。
- 首先考虑k=0k=0k=0时,路径(vi,v0,vj)(v_{i},v_{0},v_{j})(vi,v0,vj)是否存在,若存在则判断(vi,vj)(v_{i},v_{j})(vi,vj)和(vi,v0,vj)(v_{i},v_{0},v_{j})(vi,v0,vj)的路径长度较短者,为从viv_{i}vi到viv_{