typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];
//Floyd 算法,求网图G中各顶点到其余顶点 w 最短路径P[v][w] 及带权长度D[v][w]
void ShortestPath_Floyd(MGraph G, Pathmatirx *P, ShortPathTable *D)
{
int v, w, k;
for (v = 0; v < G.numVertexes; ++v) //初始化 D 与 P
{
for (w = 0; w < G.numVertexes; ++w)
{
(*D)[v][w] = G.matirx[v][w]; //D[v][w] 值即为对应点间的权值
(*P)[v][w] = w; //初始化 P
}
}
//以上初始化矩阵 D 和 P
for (k = 0; k < G.numVertexes; ++k) //k代表中转顶点的下标
{
for (v = 0; v < G.numVertexes; ++v) //v代表起始顶点
{
for (w = 0; w < G.numVertexes; ++w) //w代表结束顶点
{
if ((*D)[v][w] >(*D)[v][k] + (*D)[k][w])
{
//如果经过下标为 k 顶点路径比原两点间路径更短
//将当前两点间权值设为更小的一个
(*D)[v][w] = (*D)[v][k] + (*D)[k][w];
(*P)[v][w] = (*P)[v][k]; //路径设置经过下标为 k 的顶点
}
}
}
}
}