Floyd算法求有向图两点间最短距离
问题描述
用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵),按实验报告模板编写算法。
算法描述
在计算两点之间的最短路径时,如果两点之间存在其他的点,那么可以将最短路径的情况分为两类,经过某个点和不经过这个点。那么在求有向图中ab两点的最短路径时,遍历剩下的点,比较在a到b的路径中是经过Vi距离短还是不经过Vi距离短(Vi是除了ab的点)
核心代码
int floyd()
{
int i,j,k;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][k]+a[k][j]==min(a[i][j],a[i][k]+a[k][j]))
{
a[i][j]=a[i][k]+a[k][j];
p[i][j]=k;
}
}
}
}
}
//数组a[I][J]为IJ之间的距离,无直接相连则距离无穷大
//数组p[I][J]为IJ之间的最短路径上,从I出发要经过的下一个点