図の関連操作。

  1つの#include <iostreamの>
   2  
  3  使用して 名前空間STDを、
  4  CONST  INT MAXNUM = 100   5  
  6のtypedef 構造体srcNode {
   7      INT Vemと。
  8      構造体 srcNode * 次の;
  9  } srcNode。
10  
11のtypedef 構造体のvnode {
 12の     チャーデータ。
13      srcNodeの*のSRC;
14  }のvnode。
15  
16のtypedef 構造体GNODE {
17      INT vNum、srcNum。
18      VNODE vNodeList [MAXNUM]。
19  }グラフ、GNODE。
20  
21  
22  空隙 BFS(グラフ* G){
 23      のint V [MAXNUM * MAXNUM]。
24      int型のフロント= - 1、リア= - 1 25個の     ブール値[MAXNUM]訪れました。
26      のためにint型 I = 0 ; iは<G-> vNum; ++ i)が{
 27が          訪問[I] = 28      }
 29      V [++リア] = 0;
30      ながら(!リア= 前方){
 31          INT vnow = Vの[++ フロント]。
32          であれば(!訪問[vnow]){
 33              
34              COUT << G-> vNodeList [vnow] .DATA << ENDL。
35              [vnow] =訪れ36              srcNode * P = G-> vNodeList [vnow] .SRC。
37              一方、(P){
 38                  V [++リア] = P-> Vemと。
39                  、P = P-> 次。
40              }
 41          
42          }
 43 //             coutの<< "队列中的元素:";
44  //             のための(int型K =フロント+ 1; kは<リア=あり、k ++){
 45  //                 。COUT << G-> vNodeList [V [K]データ<<」「。
46  //             }
 47  //             COUT << ENDL。
48      }
 49  }
 50  
51  
52  空隙 DFS(グラフ* G){
 53      のintスタック[MAXNUM * MAXNUM]。
54      int型のトップ= - 1 55      BOOLが訪問[G-> vNum]。
56      のためのint型I = 0 ; I <G-> vNum。++ I){
 57          [I] =訪問58      }
 59      
60      スタック[++トップ] = 0 ;
61      ながら(!トップ= - 1 ){
 62          INT vnow =スタック[top-- ]。
63          であれば(!訪問[vnow]){
 64              COUT << G-> vNodeList [vnow] .DATA << ENDL。
65              [vnow] =訪れた66              srcNode * P = G-> vNodeList [vnow] .SRC。
67              一方、(P){
68                  スタック[++トップ] = P-> Vemと。
69                  、P = P-> 次。
70              }
 71          }
 72      }
 73  } 
 74  
75   
76グラフ* createGraph(チャー V []、INT SRC [] [ 6 ]、int型N){
 77      グラフ* G = 新しいグラフ()。
78      G-> srcNum = 7 79      G-> vNum = 6 80      のためのint型 I = 0; 私は、n <; 私は++ ){
 81          G-> vNodeList [I] .DATA = Vの[I]。
82          G-> vNodeList [I] .SRC = NULL;
83  
84          のためにINT J = 0 ; J <nであり、j ++ ){
 85              であれば(!SRC [I] [J] = 0 ){
 86                  srcNode *はsrcNow = 新しいsrcNode()。
87                  srcNow-> Vemと= J;
88                  srcNow->次= G-> vNodeList [I] .SRC。
89                  G-> vNodeList [I] .SRC = srcNow。
90              }
 91         }
 92      }
 93      リターンG。
94  }
 95  
96  空隙を表示(グラフ* G){
 97      のためにint型 i = 0 ; I <G-> vNum; iは++ ){
 98          srcNode * P = G-> vNodeList [I] .SRC。
99          一方、(P){
 100              COUT << G-> vNodeList [P-> Vemと】.DATA << "   " 101              P = P-> 次。
102          }
 103          COUT << ENDL。
104      }
 105 }
 106  
107  INT のmain(){
 108      チャー V [] = { ' A '' B '' C '' D '' E '' F ' }。
109      INTの SRC [ 6 ] [ 6 ] = {
 110          { 011010 }、
 111          {100010 }、
 112          { 100000 }、
 113          { 000011 }、
 114          { 110101 }、
 115          { 000110 }、
 116      }。
117  
118      グラフ* G = createGraph(V、SRC、6 )。
119  //     ショー(G)。
120  //     BFS(G)。
121      DFS(G)。
122 }

 

おすすめ

転載: www.cnblogs.com/zhishoumuguinian/p/11761443.html