プリム最小スパニングツリーアルゴリズム[1]

スコープ:図にはありません。

プリムのアルゴリズム(読者のように読み取ることができるプリム法」)木問題を最小全域を解決するために、

基本的な考え方は次のとおりです。

図は、頂点が訪問されている保存、S・セットG(VE)を設定し、

・各選択した後、最小の最短距離はVSの集合から頂点(uと表される)、収集及びS.へのアクセスSセット

連頂点U UおよびVの集合Sから到達可能な全ての頂点間の最小距離間の中間点に

集合Sはすでにすべての頂点を含むようになるまでこの操作は(nは頂点の数である)を行うのn倍です。見つけることができる、考えおよび最短パスアルゴリズムプリムはダイクストラ法が最短距離に言及する場合を除いて、ほぼ同じであると考え集合 S の代わりに、ダイクストラ点出発アルゴリズム秒。

1  INT プリム()
 2  
。3 { // 初期点0としてデフォルトでは、関数は、右側及び最小スパニングツリーを返す
4。 
5。      fi11(D、D + MAXV、INF); // 配列全体dに割り当てfi11機能INE(注意のmemset)
6。 
7。      D [ 0 ] = 0 ; //は唯一0秒に設定し、頂点距離は、Infの残りの0である
8。 
9。     INT ANS = 0 ; //は、スパニングツリーの最小の右側を格納および
10  
。11      INT I = 0、I <N; I ++ 12である 
13れる     { // ループをn回
14  
15          INT U = -。1、MIN = Infの; // UそのDので、[U]最小値、MIN最小記憶D [U] 
16  
。17          INT J = 0 ; J <N-; J ++ 18である 
19。          { // 未訪問の頂点を見つけます。 D []に最小
20は、 
21である             IF(VIS [J] == falseに && D [J] < MIN)
 22は 
23であり             、{
 24  
25                  U = J;
 26である 
27                  MIN = ; D [J]
 28  
29              }
 30  
31である         }
 32  
33          //Dは、以下の頂点の残りの部分よりも[U] Infを見つけることができないとsの集合連通していない
34である 
35          IF(U == - 1 36  
37 [              リターン - 1 ;
 38である 
39          VIS [U] = trueに ; // タグU訪問として
40  
41である          ANS = D + [U]; //はツリースパニング最小添加しながら、最小の距離Sを設定する
42ことである 
43である         ためint型 V = 0 ; V <N-; V ++ 44は 
45          { // V未訪問&& && UはVにuがセットが近いSから調停点Vを行うことができる達する
46である 
47              IF(VIS [V] == falseに && G [U] [V]!= Infの&& G [U] [V] <D [V])
 48  
49                  D [V] = G [U] [V]; // G [U] [V]をDに割り当てられている[V] 
50  
51である         }
 52である 
53である     }
 54は、 
55      の戻り ANS; // 戻り値右の最小スパニングツリーの側、及び
56は、 
57れています }

 

 

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11912499.html