Floyed算法是求各顶点之间与其他顶点的最短路径,及长度
首先构造两表:
邻接矩阵表D,记录中间点表Path。
设两顶点 i,j 有{ i,j }路径。若有z顶点,有{ i,j }>{ i , z }+{ z , j }时。
将{ i,j }在D中的值用{ i , z }+{ z , j }替代。
将Path中的对应i,j 交界位置的值存放为z。(Path中为-1的位置代表两点直接相连最近)
!!!在比较中 i!=z,j!=z。把z作为1~9将所有的路径都比较一次。
算法:
inline void floyd(){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[k][i][j]=min(f[k-1][i][j],f[k-1][i][k]+f[k-1][k][j]);
}