隣接リストのソート(リスト順)

泡立ちがので、これはリンクされたリストのノードの頭に相当しない場合、データタイプテーブル隣接テーブルヘッダノードとエッジノードテーブルので、2個、まず一の周期に設定され、同じではない]を選択し、撮影した考えの一種。

それは最適化することができます:あなたは交換が再び起こらなかった取る場合は、それが命じたので、バブルアップする必要はないだろうと説明しました。直接ループのうち、サイクルタイムを削減します。

Iは、文字列型のデータに格納されるテーブルのエッジノードにおいて、降順にソートヘッダーノードにおけるそれらの指標によれば、図のBFSとDFSにおける同じプロセスのために同じ結果を得ることは容易である、およびユーザーの入力はので、異なる結果が変化しません。

 
地図<文字列、整数> MMP; // 文字列との座標間のマッピング

構造体ArcNode //エッジリストノード
{ 
    文字列名; 
    int型wigth; 
    ArcNode *次; 
}; 

構造体// VertexNode頂点ノードリスト
{ 
    文字列名。 //名前
    ArcNode * firstarc; //テーブルエッジノードの最初の要素を指します
}。
グラフクラス
{ 
プライベート:
    INT pointnum、eagenum; 
    VertexNodeポイント[MAXN]; //頂点配列
    最後ArcNode * [MAXN];尾ノードへ//点
    INT VIS [MAXN]; //タグ配列
    INTは[MAXN] DIS; //距離配列
    のボイドinsertElement(int型のPOS、ArcNode * P); 
    sortlistが(VertexNodeのnilを)無効; 
公共:
    グラフ(); //コンストラクタ
    ボイド(pointnum int型、int型eagenum)を作成し、
    無効initvis(); 
    無効get_agree(); //出力
    空隙DFS(文字列が始まる、INTフラグ ); // 深さ優先探索
    空隙BFS(ストリング開始); // BFS 
    空隙dfs_all(文字列が始まる)、
    ボイドソート(); 
    ボイドbfs_all(文字列が始まります)。 
    int型get_connected_num(); //接続されたコンポーネントを見つけます
    BOOL is_connected(); //通信の場合
    BOOL is_exit(文字列str); //少しがある場合
    無効delete_point(文字列STR)は、
    ダイクストラ(文字列の開始)を無効、
    無効プリム(); 
    クラスカルを無効(); 
    // TODO:最小スパニングツリー、
    空印刷(); 
} ;

 

空グラフ:: sortlistが(VertexNodeはnil)
{ 
    ArcNode *前、*今、
    int型CNT = 0; 
    前= nil.firstarc。
    (PRE)、一方
    { 
        CNT ++。
        事前=プレ>次。
    } 
    (cntが<= 1)であれば
    { 
        返します。
    } 
    //のprintf( "CNT =%d個の\ n"、CNT)。
    ArcNode * TMP; 
    [OK]をint型= 1; 
    以下のために(; iはCNT <I ++は、I = 0 INT)
    { 
        プリ= nil.firstarcと、
        今= nil.firstarc->次。
        OK = 1; 
        一方、(今)
        { 
            IF(MMP [NOW->名]> MMP [プレ>名])
            { 
                スワップ(NOW->名、プレ>名); 
                スワップ(NOW-> wigth、プレ> wigth)。
                OK = 0; 
            } 
            事前=今。
            今=前>次。
        } 
        (OK == 1)であれば
        { 
            破ります。
        } 
    } 
    /*pre=nil.firstarc。
    一方、(PRE)
    { 
        COUT <<プレ>名<< "|" <<前> wigth << ENDL。
        事前=プレ>次。
    } * / 
}
ボイドグラフ::ソートは、()
{ 
    ため(INT i = 0; I <pointnum; iは++)
        sortlistが(点[I])。
}

おすすめ

転載: blog.csdn.net/hrbust_cxl/article/details/88690282