[概要]グラフ理論アルゴリズム - 予選
隣接行列は、 2次元アレイは、このようなエッジとして、図に関連する情報に表されていると[I]は[j]はiとノードj(及び重量)ノードとの間の関係-を表すグラフが密に示す、およびしばしばより適切に隣接するノードの特定の対が隣接行列を使用するかどうかを判断します。
隣接リスト:ストレージ構造、グラフの各頂点のための単一のリストを確立し、ノード(無向グラフ)に隣接する全てのノードの単一のリストに格納されているi番目のまたはすべてのノードにViは尾のありますアーク点ノード(有向グラフ)及びその関連情報- 存在する場合、アプリケーションと少ないときに、2つの特定のノードの隣接ノードの動作を横切る多数の決定された関係、隣接リストのより適切な選択です。
データ構造表現隣接リスト:ベクトル
1. 構造の定義エッジを表すために使用されるエッジに隣接するノードとの重み、を含みます。
構造体のエッジ { INT NEXTNODE; // 次のノードIDの INTのコスト; // 重量の右側 };
2. 各ノードのための単一のリストの確立は、隣接する重みとノードのエッジの情報を格納します。サイズNのアレイを確立し、記憶素子が目標ベクトル、エッジ[i]はiが確立されている単一の連結リストノードを表しています。
ベクター<エッジ>エッジ[N]。
3.単一のリストの初期化、ベクトル::クリア()これらの単鎖消去の操作を使用して
用(int型私は= 0 ; Iは、Nを<Iは++)// すべてのノードを横断 { エッジ[I] .clear(); // その空の単鎖 }
4. グラフにエッジを追加し、対応するノードにエッジオブジェクトのリンクされたリストに追加されます。
TMPエッジ; //は構造エッジ準備 tmp.nextNodeを= 3 ; // 次のノード番号が付けられている3 tmp.cost = 38であり ; // 38のエッジ重み値である エッジ[ 1。 .push_back(TMP)]。// 単一のリスト内のノードを変更して追加
5. クエリのすべての隣接ノード情報、ベクトルのトラバース
以下のために(int型 I = 0 ; I <エッジ[ 2 ] .sizeを、Iは++)// エッジ[2]トラバーサルのために、即ちトラバースすべてのノード2と隣接する辺 { INT NEXTNODE =エッジ[ 2 ] [I ] .nextNode; // 読み取り隣接ノード INTのコスト=エッジ[ 2 ] [I] .cost; //は、エッジ重み値を読み取ります }
6. 側面のいくつかの単一のリストを削除するには、情報、削除する(vector.begin)+最後の要素、ベクトル::消去、すなわちvector.erase(vector.begin()を呼び出し+最初の要素番号を削除したいときそのようなノードのエッジの単一のリストを削除など+ 1の数は、[1]〜[I]情報側に対応する場合、
エッジ[ 1 ] .erase(エッジ[ 1 ] .begin()+ I、エッジ[ 1 ] .begin()+ 1 + 1)。