void Floyd( MGraph G, int path[][MAX_VERTEX_NUM], VRType dist[][MAX_VERTEX_NUM] ) { //用Floyd算法求有向网G中每对顶点之间的最短路径path[i][j]及 //带权路径长度dist[i][j],dist[i][j]存放顶点vi到vj的最短距离, //path[i][j]保存从源点vi到终点vj的最短路径中的源点vi的下一个顶点的序号 int i,j,k; for( i=0; j<G.vexnum; ++i ) for( j=0; j<G.vexnum; ++j ) { dist[i][j] = G.arcs[i][j].adj; //初值为i到j 的直接距离 path[i][j] = j; //初值为顶点vj的序号 } for( k=0; k<G.vexnum; ++k ) { for( i=0; i<G.vexnum; ++i ) { for( j=0; j<G.vexnum; ++j ) { if( i==k || j==k|| i==j) continue; if( dist[i][j] > dist[i][k]+dist[k][j] ) //得到新的最短路径长度值 { dist[i][j] = dist[i][k]+dist[k][j]; //更新最短路径长度值 path[i][j] = path[i][k]; //更新最短路径 } }//for(j...) }//for(i...) }//for(k...) }//Floyd