ラボ:グラフを作成します。

図の隣接行列で実施される動作の6-1 JMU-DS-セット(30分) 

  1. キーコード
1  空隙 CreateMGraph(MGraph&Gは、int型、N INT E)
 2  {
 3      int型I、J。
4      GN = N。
5      GE = E。
6      (i = 1 ; iはMAXVを<; iは++ 7      {
 8          ため(J = 1、J <MAXV; J ++ 9          {
 10              g.edges [I] [J] = 0 ;
11          }
 12      }
 13      int型A、B。
14      のための(i = 0 ; iは、Eを<; I ++ 15      {
 16          CIN >> A >> B。
17          g.edges [A] [B] = 1 18          g.edges [B] [A] = 1 19      }
 20  }
 21  空隙 DFS(MGraph G、INT V)
 22  {
 23      静的 int型のn = 0 24      であれば(訪問[V] == 0 25      {
 26          であれば(n個の== 0 27          {
28              coutの<< V;
29              のn ++ ;
30          }
 31          他の
32          {
 33              COUT << "  " << V。
34              N ++ 35          }
 36          [V]訪問= 1 37      }
 38          のためにINT J = 1 ; J <= GN; J ++ 39          {
 40              であれば(g.edges [V] [J] &&訪問[J] == 0 41             {
 42                  DFS(G、J)。
43              }
 44          }
 45  }
 46の#include <キュー>
 47  空隙 BFS(MGraph G、INT V)
 48  {
 49      のint T。
50      キュー< 整数 > Q;
51      であれば(訪問[V] == 0 52      {
 53          COUT << V。
54          [V]訪問= 1 55          q.push(V)。
56      }
 57     一方、(!q.empty())
 58      {
 59          T = q.front()。
60          q.pop()。
61          のためにINT J = 1 J ++; J <= GN 62          {
 63              であれば(g.edges [T] [J] == 1 &&は、[J] ==訪問0 64              {
 65                  COUT << "  " < < J;
66                  [j]を訪問= 1 67                  q.push(J)。
68              }
69          }
 70      }
 71 }

 

    2.ファイル名を指定して実行スクリーンショット

 

6-2 JMU-DS-図の隣接テーブル操作(20分) 

  1. キーコード
1  空隙 CreateAdj(AdjGraph *&G、整数 nは、INTのE)
 2  {
 3      int型I。
4      G = 新しいAdjGraph。
5      G-> E = E。
6      G-> N = N。
7      (i = 1 ; iが<= N; iは++ ){
 8          G-> adjlist [I] .firstarc = NULL;
9      }
 10      (i = 1 ; iは= Eを<; iは++ 11      {
 12          int型A、B。
13          CIN >> A >>B;
14          ArcNode * P * Q。
15          、P = 新しいArcNode。
16          = Q 新しいArcNode。
17          P-> adjvex = B。
18          Q-> adjvex = A。
19          P-> nextarc = G-> adjlist [A] .firstarc。
20          G-> adjlist [A] .firstarc = P。
21          Q-> nextarc = G-> adjlist [B] .firstarc。
22          G-> adjlist [B] .firstarc = Q。
23      }
 24  }
 25  空隙 DFS(AdjGraph * G、INTV)
 26  {
 27      静的 int型のn = 0 28      ArcNodeの*のP;
29      [V]訪問= 1 30      であれば(!N) 
 31      {
 32          COUT << V。
33          N ++ 34      }
 35      他の
36      {
 37          COUT << "  " << V。
38          N ++ 39      }
 40      P = G-> adjlist [V] .firstarc。
41      一方(P =!NULL)
 42      {
 43          であれば(訪問[P-> adjvex] == 0 44              DFS(G、P> adjvex)。
45          、P = P-> nextarc。
46      }
 47      
48  }
 49  空隙 BFS(AdjGraph * G、INT V)
 50  {
 51      INT I、W; ArcNode *のpは、
52      キュー< 整数 > Q;
53      coutの<< V;
54      [V]訪問= 1 55     q.push(V);
56      ながら(!q.empty())
 57      {
 58          = W q.front()。
59          q.pop()。
60          、P = G-> adjlist .firstarc [W]。
61          ながら(!p = NULL)
 62          {
 63              であれば(訪問[P-> adjvex] == 0 64              {
 65                  COUT << "  " << P-> adjvex。
66は、                  訪問[P-> adjvex] = 1 67                  q.push(P->adjvex);
68              }
 69              P = P-> nextarc。
70          }
 71      }
 72      
73 }

 

    2.ファイル名を指定して実行スクリーンショット

おすすめ

転載: www.cnblogs.com/damao33/p/10926735.html