1. 问题
用Floyd算法求解下图各个顶点的最短距离。
2. 解析
假设有向图G=(V,E)采用邻接矩阵存储。
设置一个二维数组A用于存放当前顶点之间的最短路径长度,分量A[i][j]表示当前顶点i到j的最短路径长度。
递推产生一个矩阵序列:A0–>A1->-A2–>…Ak–>…An-1
A[i][j]:i–>j的路径上所经过的顶点编号不大于k的最短路径长度。
3. 设计
核心算法:
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];
4. 分析
时间复杂度:O(n^3)
5. 源码
https://github.com/dickdan/Floyd/blob/master/2.1(floyd).cpp