幅優先トラバーサル(BFS)
- プロセス分析
- キューを初期化します。チームの後に訪問頂点、Aチームの頂点、。同時アクセス頂点B、Fおよびエンキュー隣接する頂点
-
アクセスノードB、ノードBは隣接ノードBと同時にデキュー、頂点C、I、Gエンキュー訪問されていません
- アクセスノードFは、ノードFは、ノードFは、に隣接するが、デキューされ、頂点G、Eエンキュー訪問されていません。同様にした後、キューが空になるまで。結果のシーケンスは、チームトラバーサルシーケンスであります
- BFSコード
-
1 BOOLは [MaxVertexNum】訪問; // アクセス・タグ・アレイ 2 // 隣接行列幅トラバーサルアルゴリズム 3。 ボイドBFSTraverse(MGraph G) 4。 { 5 キューQ; // サブキュー 6 のための(INT I = 0 ;私はGを< vexnum; Iは++ ) 。7 { 8。 = [I]訪問falseに、 // アクセスタグ・アレイの初期化 9。 } 10 InitQueue(Q); //は補助キューを初期化する 11。 ため(INT I = 0; IはG.vexnumを<; Iは++) // 0から頂点トラバース 12は IF!()[I]を訪れ // BFS一度呼び出さ各連結成分のための 13である BFS(G、I); // V Iは、未訪問オーバーVからIは、開始BFS 14 } 15 16 空隙 BFS(MGraph G、int型V) 17 { 18は、 // 頂点vから出発して、図最初のトラバーサルG、補助キューによるアルゴリズムQ 19。 訪問(V); // アクセス・ノードv 20れる [V] =訪れ真と ; // アクセスVマークするために 21である エンキュー(Q、V); // 頂点vキュー 22は 、一方(!のisEmpty(Q)) 23である { 24 デキュー(Q、V); // 頂点vデキュー 25 用(INT W = FirstNeighbor(G、V);> = W 0、W = NextNeighbor(G、V 、W))// すべてv隣接点検出 26である { 27 IF(訪問[W])! // W vは隣接ノードのために訪問していない 28 { 29 訪問(W); // 訪問頂点W 30 訪れた= [W] をtrueに ; // マークwの頂点へのアクセスを作る 31 エンキュー(Q、W); // 頂点Wエンキュー 32 } 33 } 34 } 35 }
-
深さ優先探索(DFS)
- 分析手順:まずVから出発して、Vの各頂点に隣接してアクセスしていないがWを訪問している、図Vに開始頂点にアクセスする。1、次いでWへのアクセス。1アバットメントのいずれかに記載の頂点W訪問されていない2、 ....プロセスを繰り返します。アクセスを継続することができない場合は、図の全ての頂点がこれまでに訪問されるまで、順番に最近アクセス頂点に戻って、それは検索処理上の頂点から始まり、隣接する頂点を訪問されていない場合は続けています。
- DFSコード
-
1 / * 深さ優先トラバーサルアルゴリズム* / 2 BOOLは [MaxVertexNum】訪問; // アクセスタグ配列 3。 ボイドDFSTraverse(MGraph G) 4。 { 5。 ための(int型 V = 0 ; V <G.vexnum; ++ V) 。6 訪問[V] = falseに ; // タグアレイアクセスを初期化 7。 ため(int型 V = 0 ; V <G.vexnum; V ++) // 0横断頂点から 8 { 9。 IF(訪問[V]!) // 頂点vも訪問し、アクセスを尋ね 10 DFS(G、V); 11 } 12である } 13が 14 ボイド DFS(MGraph G、int型V)が 15 { 16 // 頂点vから開始は、図の再帰的深さ優先トラバーサルを考え 17。 訪問(V); 18れる 訪問します[ V] = trueに、 19 のために(INT W = FirstNeighbor(G、V); W> = 0 ; W = NextNeighbor(G、V、W))// すべてv隣接点検出 20は IF!(訪問[W] ) 21は 、{ 22は DFS(G、W); 23である } 24 }
-