最短路径算法
Floyd算法实现
const int INF = 65535;
void GetShortestPath_Floyd(MGraph G, PathMatrix &P, DistancMatrix &D)
{
for (int i = 1; i <= G.vexnum; i++)
{
for (int j = 1; j <= G.vexnum; j++)
{
D[i][j] = G.arcs[i][j];
if (D[i][j] != INF)
P[i][j] = i + "->" + j;
}
}
//添加第k个可跳结点
for (k = 1; k <= G.vexnum; k++)
{
//i和j代表两个端点
for (int i = 1; i <= G.vexnum; i++)
{
for (int j = 1; j <= G.vexnum; j++)
{
if (D[i][k] + D[k][j] < D[i][j])
{
D[i][j] = D[i][k] + D[k][j];
P[i][j] = MyStrCat(P[i][k], P[k][j]);
}
}
}
}
}