図の隣接行列で実施される動作の6-1 JMU-DS-セット(30分)
- キーコード
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 空隙 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.ファイル名を指定して実行スクリーンショット