送分来了,dijkstra看不懂了
xxxl 2006-07-05 11:19:04 清华数据结构这本书上的算法
---------------------------------------------------------------------------------
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) //更新当前最短路径及距离
if (!final[w]&&(min+G.arcs[v][w]<D[w])){ // 修改D[w]和P[w],w∈V-S
D[w]=min+G.arcs[v][w];
P[w]=P[v];
P[w][v]=true; //P[w]=P[v]+[w]
}//if
}//for
}//shortestpath_DIJ
算法的基本思想看懂了,就是不知道P[]和P[][]到底有什么用,希望各位大大解释的清除一些
------------------------------------------------------------
If (D[v]<INFINITY) {P[v][v0]=true;P[v][v]=true;} //不懂
-----------------------------------------------------------------------
P[w]=P[v];
P[w][v]=true; //P[w]=P[v]+[w] 也不懂
---------------------------------------------------------------