Floyd
void Floyd(MatGraph g)
{
int A[MAXV][MAXV];
int path[MAXV][MAXV];
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];
if (i != j && g.edges[i][j] < INF)
path[i][j] = i;
else
path[i][j] = -1;
}
}
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] = path[k][j];
}
}
}
}
}
void Dispath(MatGraph g, int A[][MAXV], int path[][MAXV])
{
int apath[MAXV], d;
int i, j, k;
for (i = 0; i < g.n; i++)
{
for (j = 0; j < g.n; j++)
{
if (A[i][j] < INF && i != j)
{
printf("从%d到%d的路径为:", i, j);
d = 0;
apath[d] = j;
k = path[i][j];
while (k != -1 && k != i)
{
apath[++d];
k = path[i][k];
}
apath[++d] = i;
printf("%d", apath[d]);
for (k = d - 1; k >= 0; k--)
printf(",%d", apath[k]);
printf("\t路径长度为:%d\n", A[i][j]);
}
}
}
}