迪杰斯特拉算法是求图中某一顶点到其余各顶点的最短路径,如果求图中任意一对顶点间的最短路径,通常使用弗洛伊德算法
1.迪杰斯特拉算法:
设有两顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T中存放图中剩余顶点。初始初始状态时,集合S中只包含源点v0然后不断从集合T中选取到顶点v0路径长度最短的顶点vu并入集合S中。集合S每并入一个新的顶点vu,都要修改顶点vo到集合T中顶点的最短路径长度值。不断重复此过程,直到集合1T中的顶点全部并入S为止。时间复杂度是O(n^2)
2.弗洛伊德算法:
1)设置两个矩阵A和Path,初始时将图的邻接矩阵赋值给A,将矩阵Path中的元素全部设置为-1。
2)以顶点k为中间顶点,k取0~n-1(n为图中顶点个数),对图中所有顶点对{i,j}进行如下检测与修改:
如果A[i][j]>A[i][k]+A[k][j],则将A[i][j]改为A[i][k]+A[k][j]的值,将Path[i][j]改为k,否则什么都不做。
弗洛伊德算法的时间复杂度为O(n^3).