void Floyd(Graph G,int path[max][max],int A[max][max]){
// 对path数组和A数组进行初始化
for (int i=0;i<G.vexnum;i++) {
for (int j=0;j<G.vexnum; j++){
path[i][j]=-1;
A[i][j]=G.ArcNode[i][j];
}
}
// 加入k节点之后更新所有顶点对之间的距离及path
for(int k=0;k<G.vexnum;k++){
for (int i=0;i<G.vexnum; i++) {
for (int j=0;j<G.vexnum;j++) {
if(A[i][j]>A[i][k]+A[k][j]){
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
}
}
}
// 输出顶点u v最短路径上得顶点序列
void path_u_v(int u,int v,int path[][max],int A[][max]){
if (A[u][v]>max)
printf("它们之间不存在路径!!!");
else if(path[u][v]==-1){
printf(" %d->%d ",u,v);
// printf("%d",A[u][v]);
}
else{
int mid=path[u][v];
path_u_v(u,mid,path,A);
path_u_v(mid,v,path,A);
}
}
佛洛依德算法
最新推荐文章于 2024-09-11 00:16:09 发布