flody算法把整个邻接矩阵(adjacent matrix)任意两点间最短距离以及路径path算出来,方法步骤(technique steps)有:
algorithmsteps:
a) vary k from 1 to n
b) vary I from 1 to n
c) vary j from 1 to n
ⅰ)Q[i][j]=min(Q[]I[J],Q[I][K]+Q[K][J])
ⅱ) if(Q[I][K]+Q[K][J]<Q[i][j])
thendo the following
PATH[i][j]=combine(P1,P2)
inwhich P1=PATH[i][k],P2=PATH[k][j]
for exmple:
经过k=0-3,结果为:
vs08 code is:
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#define maxsize 20
int main(int argc,char *argv[])
{
int i,j,k,vertexnum,a[maxsize][maxsize],p[maxsize][maxsize];
char path[maxsize][maxsize][maxsize],p1[maxsize],p2[maxsize];
printf("input the total number of vertex in the graph:\n");
scanf("%i",&vertexnum);
printf("input the adjacent matrix\n");
for(i=0;i<vertexnum;i++)
{
for(j=0;j<vertexnum;j++)
scanf("%i",*(a+i)+j);
}
for(i=0;i<vertexnum;i++)
for (j=0;j<vertexnum;j++)
{
if(a[i][j]==0)
{
p[i][j]=999;
strcpy(path[i][j],"-");
}
else
{
p[i][j]=a[i][j];
itoa(i,p1,10);
strcat(p1,"-");
itoa(j,p2,10);
strcat(p1,p2);
strcpy(path[i][j],p1);
}
}
printf("after initialization,the weigh matrix is:\n");
for(i=0;i<vertexnum;i++)
{
for(j=0;j<vertexnum;j++)
printf("%i\t",p[i][j]);
printf("\n");
}
printf("after initialization,the path matrix is:\n");
for(i=0;i<vertexnum;i++)
{
for(j=0;j<vertexnum;j++)
printf("%s\t",path[i][j]);
printf("\n");
}
for(k=0;k<vertexnum;k++)
for(i=0;i<vertexnum;i++)
for(j=0;j<vertexnum;j++)
{
if(p[i][k]+p[k][j]<p[i][j])
{
p[i][j]=p[i][k]+p[k][j];
strcpy(p1,path[i][k]);
strcat(p1,"-");
strcpy(p2,path[k][j]);
strcat(p1,p2);
strcpy(path[i][j],p1);
}
}
printf("now the result is(optimation shortest way):\n");
for(i=0;i<vertexnum;i++)
{
for(j=0;j<vertexnum;j++)
printf("%i\t",p[i][j]);
printf("\n");
}
printf("and the route is :\n");
for(i=0;i<vertexnum;i++)
{
for(j=0;j<vertexnum;j++)
printf("%s\t",path[i][j]);
printf("\n");
}
system("pause");
return 0;
}