void printPath(int u, int v, int path[][MAX]){
if (path[u][v] == -1){
cout << "<" << u << "," << v << ">";
}else{
int mid = path[u][v];
printPath(u, mid, path);
printPath(mid, v, path);
}
}
void Floyd(int n, float MGraph[][n], int Path[][n]){
int i, j, v;
int A[n][n];
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
A[i][j] = MGraph[i][j]; //初始化i->j的路径长度
Path[i][j] = -1; //初始化i->j路径的前一个节点全为-1
}
}
for(v = 0; v < n; v++){ //v是中间节点哈
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){ //这两层循环是列出所有节点对。
if(A[i][j] > A[i][v] + A[v][j]){ //事实上,这里i, j 不等于 v, 但是根据要求A[i][j] > A[i][v] + A[v][j]显然是不成立的所以没有i,j≠v
A[i][j] = A[i][v] + A[v][j]; //更新i->j路径的最短距离
Path[i][j] = v; //更新i->j路径的中间节点
}
}
}
}
}
08-30
945
01-27
1355
05-07
7588
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交