弗洛伊德算法是解决一个顶点到图中一个顶点的最短路径问题。通常适用于一对顶点间的最小路径.。
void Floyd(Mgraph g,path[maxsize]){
int A[maxsize][maxsize];
for(int i=0;i<g.n;i++){
for(int j=0;j<g.n;j++){
A[i][j]=g.edges[i][j];
path[i][j]=-1;
}
}
for(int k=0;k<g.n;k++){
for(int i=0;i<g.n;i++){
for(int j=0;j<g.n;j++){
if(A[i][j]>A[i][k]+A[j][k]){
A[i][j]=A[i][k]+A[j][k];
}
}
}
}
}
其关键步骤是三重循环。最外面的一层循环是对整个图的顶点进行遍历,将每个顶点最为要求的两结点的中间结点,对数组进行更新,直到最后,数组保存了最短路!