泡立ちがので、これはリンクされたリストのノードの頭に相当しない場合、データタイプテーブル隣接テーブルヘッダノードとエッジノードテーブルので、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])。 }