/ * 図の非連結成分Gの数検索 DFSを使用する * / ボイド DFS(グラフG、int型V){ eノード * P; 訪問[V] = trueに、 訪問(T); P = G-> adjListを[V ] .firstarc; 一方(P =!NULL ){ IF(== [P-> adjvex]を訪問falseに){ DFS(G、P - > adjvex); } P = P-> nextarc; } } int型ComnNum(グラフG){ int型 NUM = 0 ; のため(INTは iは= 0 ; I <G->頂点; I ++ ){ 訪問[I] = 偽。 } ため(INT iは= 0 ; I <G->頂点; I ++ ){ 場合(訪問[I] == 偽){ DFS(G、I)。 NUM ++ ; } } }
/ * 隣接テーブル記憶用いグラフG アルゴリズムは、図は、接続グラフGであるか否かを判断する設計 * / ボイド DFS(グラフG、int型V){ eノード * ; P 訪問[V]が = trueにし、 訪問(V); P = G- > adjList [V] .firstarc; ながら(!P = NULL ){ IF(訪問[P-> adjvex] == falseに){ DFS(G、P - > adjvex); } P = P-> nextarc; } } BOOL IsConnect(グラフG)は{ BOOL内のフラグは、= trueに、 int型は[MAXSIZE]訪問しました。 以下のために(INT iが= 0 ; I <g.Verticesを、I ++ ){ 訪問[I] = 偽。 } DFS(G、0 ); 以下のために(INT iが= 0 ; I <G->頂点; I ++ ){ 場合(訪問[I] == 偽){ フラグ = 偽。 休憩; } } 戻りフラグ。 }
/ *は 隣接図形のVI-とテーブル> Vjのパスがあるか否かを判断する * / ボイド DFS(グラフG、int型V){ eノード * ; P 訪問[V] = trueに、 訪問(T)は、 P = G- > adjList [V] .firstarc; ながら(!P = NULL ){ IF(訪問[P-> adjvex] == falseに){ DFS(G、P - > adjvex); } P = P-> nextarc; } } BOOLが訪問[MAXSIZE]; BOOL existPath(グラフG、int型 V、INTJ){ ため(intは iが= 0を I <G->頂点; I ++ ){ 訪問[I] = 偽。 } DFS(G、V)。 もし(訪問[J] == 偽){ 戻り 偽。 } 他{ 戻り 真。 } }
/ * 無向図の記憶隣接テーブル検索)関数concomxを(設計 kの連結成分の正確数のノードの数 * / 無効 DFS(グラフG、int型 V、BOOL&[訪問]を、INT&{vNum)を eノード * P; 訪問[V] = trueに、 vNum ++ ; のために(P = adjList [V] - > firstarc; P; P = P-> 次に){ IF(訪問[P-> adjvex] == flase) { DFS(G、P - > adjvex、訪問、vNumが); } } } BOOLが訪問[MAXSIZE]; INT concomx(グラフG、int型K){ // の数のノード INT COUNT = 0 ; // 連結成分の数を記録 INT vNum = 0 ; のための(INT I = 0 ; I <G.vertices; I ++ ){ 訪問[I] = falseに; } 用(INT I = 0 ; I <G.vertices; I ++ ){ vNum = 0 ; IF(訪問[I] == falseに){ DFS(G、I、訪問、vNum); } IF(vNum == K) ++ COUNT ; } 戻り値の数。 }
/ * 無向グラフGが木であるか否かを判定し、アルゴリズムを設計します。 戻り真木、そうでない場合はfalse 結論:アクセスノードとDFSアクセス番号側をnは(N-1)2であり、 辺の数は、ツリーのアクセスが2(N-1)である場合 * / ボイド DFS(グラフG、int型 V、INT&vNum、INT&列挙型){ のeNode * PLは、 [V]を訪れた = trueに、 vNumを ++; // P = adjList [V] .firstarc、 しばらく!(P = ヌル){ 列挙 ++; // IF(訪問[P-> adjvex] == falseに){ DFS(G、P - > adjvex、vNum、列挙型)。 } P = P-> nextarc。 } } ブールイストレ(グラフG){ int型一= 0列挙= 0 。 以下のために(INT iが= 0 ; I <G.verticesを、I ++ ){ 訪問[I] = 偽。 } DPS(G 1 、列挙型)。 もし(一g.vertices && Knum == == 2 *(Vnum- 1 )){ 戻り 真。 } エルス{ 戻り 偽。 } }
// なしG Gの隣接行列、図トラバーサルにおいてGに与えられた頂点V0は、深図開始 // プレゼンス隣接行列Bと、得られたスパニングツリートラバーサル深 ボイド DFS(グラフG、int型 B [] [MAXSIZE]をINT V){ 訪問[V] = trueに、 のために(INT J = 0 ; J <G.vertices; J ++ ){ IF!(GA [V]は[J] && 訪問[J]){ B [V] [J ] = 1 ; DFS(G、J、B); } } } BOOLは、訪問[MAXSIZE]; ボイド shengchengTree(グラフG、int型B [] [MAXSIZE]){ 用(INT iは= 0 ; I <G.vertices; I ++ ){ [i]を訪問 = 偽。 } ため(INT iは= 0 ; I <G.vertices; I ++ ){ 場合(!訪問[I]){ DFS(G、B、I)。 } } }