図-最短パスの問題
5191 ワード
あるソースポイントから残りの頂点への最短パス
ディジェストラアルゴリズム
ディジェストラアルゴリズムは,経路長が増加する順序で最短経路を生成するアルゴリズムである.(負の丸このアルゴリズムは無効です)
アルゴリズムの説明:は、帯域重みの隣接行列arcsで帯域重み有向図を表し、arcs[i][j]で弧上の重み値を表すと仮定する.存在しなければarcs[i][j]は∞である、Sは既に見つかったv 0頂点からの最短経路の終点の集合であり、初期状態は空である. v 0~V−Sの頂点からなる最短経路を選択し、vjをSに加える. vjがSに加わることにより最短経路が変化し、v 0からV-Sまでの可能な最短経路 を修正する.は、第2、3のステップn-1を繰り返す、v 0から図上の残りの頂点への最短経路は、順次インクリメントされたシーケンス である.
このアルゴリズムは最終的に増加した最短パスシーケンスであり、各サイクルではまず残りのパスの中の最短パスを見つけ、残りの最短パスを更新し、選択ソートのように、選択の後の最小パスを前に置くたびに、ソースポイントから図の各頂点への最短パスである秩序シーケンスに至る.
続きます...
ディジェストラアルゴリズム
ディジェストラアルゴリズムは,経路長が増加する順序で最短経路を生成するアルゴリズムである.(負の丸このアルゴリズムは無効です)
アルゴリズムの説明:
このアルゴリズムは最終的に増加した最短パスシーケンスであり、各サイクルではまず残りのパスの中の最短パスを見つけ、残りの最短パスを更新し、選択ソートのように、選択の後の最小パスを前に置くたびに、ソースポイントから図の各頂点への最短パスである秩序シーケンスに至る.
/*
G.arcs :
vo :
P :
D : v0 vi
*/
void shortestPath_DLJ(MGraph G, int v0, PathMatrix &P, ShortPathTable &D) {
/*
v0 v P[v] D[v]
P[v][w] true w v0 v
final[v] true v0 v ,
v S
*/
//
for(v = 0; v < G.vexnum; v++){
final[v] = false;
// v0 v , D[v] , INFINITY
//G.arcs , INFINITY
D[v] = G.arcs[v0][v];
//
for(w = 0; w < G.vexnum; w++) P[v][w] = flase;
// D[v] INFINTY, v0 v ,v0, v
if(D[v] < INFINTY){ P[v][v0] = true; P[v][v] = true;}
}
// ,v0 S
D[v0] = 0; final[v0] = true;
// , v0 v , v S
// G.vexnum - 1
for(i = 1; i < G.vexnum; i++){
// v0
min = INFINTY;
for(w = 0; w < G.vexnum; w++)
// V-S
if(!final[v]){ v = w; min = D[w];}
// , v S
final[v] = true;
/*
v S , v
,
*/
for(w = 0; w < G.vexnum; w++)
if(!final[w] && min + G.arcs[v][w] < D[w]){
D[w] = min + G.arcs[v][w];
// v0 v P[v] P[w]
//w
P[w] = P[v];
P[w][w] = true;
}
}
}
続きます...