void Dijkstra( MGraph G, int i, int path[], VRType dist[] ) { //用Dijkstra算法求有向网G从源点vi到其余顶点vj的最短路径path[j]及 //带权路径长度 dist[j] int j,k,m; VRType min; bool s[MAX_VERTEX_NUM]; //s[i]为true时,已经求得从vi到vj的最短路径 for( j=0; j<G.vexnum; ++j ) { s[j] = false; dist[j] = G.arcs[i][j].adj; //初值为vi到vj的直接距离 if( j != i && dist[j] < MAX_VALUE) //vi到vj有直接路径 path[j] = i; //vi到vj有边 else path[j] = -1; //vi到vj无边 } dist[i] = 0; //vi到vj距离为0 s[i] = true; //vi顶点并入s集 for( k=1; k<G.vexnum; ++k ) //对于其余G.vexnum-1个顶点 { //求vi到某个顶点vj的最短路径,并将vj并入s集 min = MAX_VALUE; //当前所知离vi顶点的最近距离,设初值为∞ for( j=0; j<G.vexnum; ++j ) //对所有顶点检查 if( !s[j] && dist[j]<min ) //在s集之外的顶点中找离vi最近的顶点vj { m = j; //在s集之外的离vi最近的顶点序号 min = dist[j]; //最近的距离 }//if s[m] = true; //将vm并入s集 //根据新并入的顶点,更新不在s集合中的顶点到vi的距离和路径数组 for( j=0; j<G.vexnum; ++j ) if( !s[j] && min+G.arcs[m][j].adj<dist[j] ) {//vj不属于s集且vi-vm-vj的距离<目前vi-vj的距离 dist[j] = min + G.arcs[m][j].adj; //更新dist[j] path[j] = m; }//if }//for(k...) }//Dijkstra