クラスカルクラスカルのアルゴリズム

クラスカルのアルゴリズム[]は二つの補助アレイ親に依存して、[]エッジ。

親[]配列は、互いに素なセット動作を実装するために使用され、すなわち、クエリセットと、2つのセットが一組にまとめ根尖。

のみクラスカルのアルゴリズムは、横断エッジは[]配列は、ツリーに順次ことができるように、昇順に各エッジが重みの大きさに応じて、前記グラフのエッジのセットとして[]アレイエッジ

追加の親[]配列によって、現在の最小重量の側面を追加は、エッジリングを起こさないクエリを確実にするために添加しました。

1つ の#define MAXSIZE 100;
 2のtypedef 構造体{
 3      int型 A;           // A、B端の2つの頂点のための
4      int型B;
 5      int型の重量;      // このエッジ重み
6。 }エッジ;                 // エッジ構造
7  
。8  INT(*親、検索INT A)   // 位置する頂点の集合を見つけるルート
9  {
 10      ながら(親[A]> 0// PARENルートノードの配列が-1に等しい
。11          = 親[A]、
 12であります     戻り;
 13である }
 14  int型の親[MAXSIZE];         // 父親頂点アレイは互いに素セット動作実現
15のエッジエッジ[MaxEdgeを];         // 配列の側面
16  
17。 ボイドクラスカル(MGrahp G)
 18である {
 19。     int型I、A、B ;
 20は      ソート(deges);                        // 図の配置の昇順にサイド・バイ・重量サイズ
21である     ため(I = 0 ;私は<G.vexnum; ++ I)
 22は              、親[I]は= - 1 ;                // それぞれを初期化しますこれは、頂点の集合である
23がある     ために(I = 0; IはG.arcnumを<; Iは++){        // 各エッジを走査
24          A = (親、エッジ[I] II.A)を探す;
 25          B = (親、エッジ[I] .B)検索;
 26である         IF(!A = B){                         // 頂点が物品の両側のセット内にない場合は、これらの2つのセットが組み合わさ
27              親[A] = B;                
 28              のprintf(" %のD - > D%"、エッジ[ I] A、エッジ[I] .B)// プリントこのエッジ
29          }
 30      }
 31 }

 

おすすめ

転載: www.cnblogs.com/strolling-leisurely/p/11374473.html