Floy算法用来计算任意两个顶点的最短路径:
#include<stdio.h>
#include"MGraph.h"
void Floyed(MGraph g,int A[][maxSize],int Path[][maxSize])
{
int i,j,k;
for(i=0;i<g.n;i++)
for(j=0;j<g.n;j++)
{
A[i][j]=g.edges[i][j];
Path[i][j]=-1;
}
/*****下面这个三层循环是本算法的主要操作,完成了以K为中间点对所有的顶点对{i,j}进行检测和修改****************/
for(k=0;k<g.n;k++)
for(i=0;i<g.n;i++)
for(j=0;j<g.n;j++)
if(A[i][j]>A[i][k]+A[k][j])
{
A[i][j]=A[i][k]+A[k][j];
Path[i][j]=k;
}
}
void main(void)
{
MGraph g;
int i,j;
int A[maxSize][maxSize];
int Path[maxSize][maxSize];
CreateMGraph(&g);
Floyed(g,A,Path);
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
printf("%d ",A[i][j]);
printf("\n");
}
}