如图8.26 所示一个有向网图G8 的带权邻接矩阵为:

有向网图G8 的带权邻接矩阵

用C 语言描述的Dijkstra 算法:
- void ShortestPath_DIJ(MGraph G,int v0,PathMatrix &P,ShortPathTable &D){ //用Dijkstra算法求有向网G的v0顶点到其余顶点v的最短路径P[v]及其带权长度D[v]。
- //若P[v][w]为TRUE,则w是从v0到v当前求得最短路径上的顶点。 //final[v]为TRUE当且仅当v∈S,即已经求得从v0到v的最短路径。
- for(v=0; v<G.vexnum; ++v) { final[v]=FALSE; D[v]=G.arcs[v0][v];
- for(w=0; w<G.vexnum; ++w) P[v][w] = FALSE;//设空路径 if (D[v]<INFINITY) { P[v][v0]=TRUE; P[v][v]=TRUE;}
- }//for D[v0] = 0; final[v0] = TRUE; //初始化,v0顶点属于S集
- //开始主循环,每次求得v0到某个v顶点的最短路径,并加v到s集。 for(i=1; i<G.vexnum;++i){ //其余G.vexnum-1个顶点
- min = INFINITY; //当前所知离v0顶点的最近距离 for(w=0;w<G.vexnum;++w)
- if(!final[w]) //w顶点在V-S中 if(D[w]<min){v=w;min=D[w];} //w顶点离v0顶点更近
- final[v]=TRUE; //离v0顶点最近的v加入S集 for(w=0;w<G.vexnum;++w) //更新当前最短路径及距离










