最短路径算法看不懂
来源:百度知道 编辑:UC知道 时间:2024/05/27 12:45:09
void ShortestPath_DIJ(MGraph G,int v0,PathMatrix &P,ShortPathTable &D)
{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;}
}
D[v0]=0; final[v0]=TRUE;
for (i=0;i<G,vexnum;++i)
{min=INFINITY;
for (w=0;w<G,vexnum;++w)
if(!final[w])
if(D[w]<min) {v=w; min=D[w];}
final[v]=TRUE;
for (w=0;w<G,vexnum;++w)
if(!final[w] &&(min+G.arcs[v][w]<D[w]))
{D[w]=min+G.arcs[v][w];
P[w]=P[v]; P[w][w]=TRUE;
}
}
}
P[w]=P[v] 是什么意思?
void ShortestPath_FLOYD(MGraph G,PathMatrix &P[],DistanceMatrix &D)
{for (v=0;v<G,vexnum;++v)
for (w=0;w<G,vexnum;++w)
{D[v][w]=G.arcs[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;}
}
D[v0]=0; final[v0]=TRUE;
for (i=0;i<G,vexnum;++i)
{min=INFINITY;
for (w=0;w<G,vexnum;++w)
if(!final[w])
if(D[w]<min) {v=w; min=D[w];}
final[v]=TRUE;
for (w=0;w<G,vexnum;++w)
if(!final[w] &&(min+G.arcs[v][w]<D[w]))
{D[w]=min+G.arcs[v][w];
P[w]=P[v]; P[w][w]=TRUE;
}
}
}
P[w]=P[v] 是什么意思?
void ShortestPath_FLOYD(MGraph G,PathMatrix &P[],DistanceMatrix &D)
{for (v=0;v<G,vexnum;++v)
for (w=0;w<G,vexnum;++w)
{D[v][w]=G.arcs[v]
建议看看数据结构,或算法书中的图这一张,多看几遍,推荐floyd,更好懂点,直接看代码是看不明白的。
http://baike.baidu.com/view/14495.htm