貪欲な最小スパニングツリーアルゴリズム

// プログラム2-6 
の#include <iostreamの> 使用して名前空間STD; CONST INT INF = 0x3FFFFFFF ;
 のconst int型 N = 100 ;
 BOOL S [N];
 int型最寄り[N];
 int型低コスト[N];
 ボイドプリム(INT N- 、INT U0、INT C [N] [N])
{     // 頂点数N、頂点U0を開始、重み付け隣接行列C [N-] [N-]
     // iが記載されているのであれば、[I] = TRUE、頂点最小スパニングツリーに追加
     // 頂点がUを設定し、そうでない場合、iがセットに属するVU頂点
     //はアレイ低コスト関連する最小量の最終値通過 
    [U0] Sを= trueに
 

  ; // 最初に唯一の要素、すなわち頂点U0のUを設定
    INT Iは、
     INT 、J
     ため(I = 1、私は++; I <= N 
    { 
        IF(!I = U0)
        { 
            低コスト[I] = C [U0] [I]; 
            最寄り[I] = U0; 
            S [I]が = falseに; 
        } 
        そうでなければ
            低コスト[I] = 0 ; 
    } 

    ため(I = 1 ; I <= N - 、Iは++)// コレクション内のヴ頂点の最新のセットU Tから見ると
    {
         int型の TEMP =INF;
         INT T = U0;
         のため(J = 1。 ; J <= N; J ++ 
        { 
            IF((S [J])&&(低コスト[J] <!TEMP))
            { 
                T = J; 
                TEMP = 低コスト[J ]; 
            } 
        } 
        IF(T == U0)
             BREAKを ;        //はTを見つけることができない、ループのうち

        S [T] = trueに// そうでない場合、Tは応力がU-設定添加される
        ため(Jは= 1。 ; J <= N; J ++ )// 更新低コストと最も近いです
        {
             場合(!(S [J])&&(C [T] [J] < 低コスト[J]))
            { 
                [J]低コスト =の[J] C [t]を。
                最も近い[J] = T。
            } 
        } 
    } 
} 

int型のmain()
{ 

        int型nは、[N] [N]、C、M、U、V、W。
        int型のU0。
        COUT << " 输入结点数N和边数M:" << ENDL。
        CIN >> N >> M。
        int型 sumcost = 0 ;
        以下のためのint型 I = 1; I <= N; I ++ のためのINT J = 1。 ; J <= N; J ++ 
                C [I] [J] = INF; 
        COUTが << " ノードの数U、V、および境界Wを入力してください" << ENDL;
         のためのINT I = 1 ; Iは<= M Iは++ 
        { 
            CIN >> U V >> W; 
            C [U] [V] = C [V] [U] = W; 
        } 
        COUT << " 任意のノードU0を入力してください:" << てendl; 
        CIN >>U0;
        // 和が最終lowcos、コストのすなわち最終所要最小和演算
        (N、U0、C)プリム; 
        COUT << " アレイ低コストの内容" << ENDLを、
         ためINT I = 1 ; I <= N-; I ++は
            COUT <<低コスト[I] << "  " ; 
        COUT << ENDL;
         のためのINT I = 1 I <= N; I ++は
           sumcost + = [I]低コスト
        COUT << " 最小コストは、次のとおりです。" << << sumcostendl;
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xjyxp/p/11332496.html