ベクターと隣接関係テーブルを達成
ベクター<INT> G [100]; //図頂点隣接テーブルの手段100
G [U] .push_back(V) ; // U 頂点vへの頂点からビデオエッジ、すなわち二次元アレイG [100]を作成する等価[I]
//頂点uの隣接頂点vを検索
以下のために(; [U] .size()I <G; INT iが0 = Iは++){
INT V = G [U] [I]。
.......
}
方法の利点を示す隣接テーブル
メモリ空間の辺の数に比例するだけ
のデメリット隣接リスト表現
(1)次に、U頂点vへの頂点との間の関係の調査は、消費O(n)の隣接リストを検索するには、Uと隣接するn個の頂点の数をみましょう。
(2)困難な有効エッジを削除します
書式#include <iostreamの> の#include <ベクトル> の#include <スタック> 使用して 名前空間をSTD。 静的 のconst int型 MAX = 100000 ; 静的 のconst int型 NIL = - 1 ; int型のn; ベクター < INT > G [MAX]。 INTの色[MAX]。 // 深さ優先トラバーサル ボイド DFS(INT R&LT、INT C){ スタック < 整数 > S; S.push(R) 色[R] = C。 しばらく(!S.empty()){ int型のu = S.top(); S.pop(); 以下のために(INT iが= 0 ; I <Gを[U] .size(); I ++ ){ int型、V = G [U] [I]。 もし(色[V] == NIL){ 色[V] = C。 S.push(V); } } } } ボイドassignColor(){ int型の ID = 1 ; // 初期値設定 のための(INT I = 0、I <N - 、I ++)カラー[I] = NIL; // 開始点としてUに未訪問深さ優先探索 用(INT U = 0 ; U <N-; U ++ ){ IF(色[U] == NIL)DFS(U、ID ++ )。 } } INT のmain(){ int型S、T、M、Q; // n個(頂点の数)ユーザ、mは関係の数である CIN >> N- M; // ビルド隣接リスト のための(INT I = 0。 I <M、I ++ ){ CIN >> S >> トン。 G [S] .push_back(T)。 G [t]は.push_back(S); } // 深さ優先トラバーサル、色が同じ値を頂点に設定されるに接続することができる assignColor()。 cinを >> Q; 以下のために(INT iが= 0 ; I <Qと、I ++ ){ CIN >> S >> トン。 もし(色[S] == 色[T]){ 裁判所未満 << " はい" << てendl; } 他の{ 裁判所未満 << " ノー" << てendl; } } リターン 0 ; } / * 10 9 0 1 0 2 3 4 5 7 5 6 6 7 6 8 7 8 8 9 3 0 1 5 9 1 3 * /