利用已经用邻接矩阵建立好的图,可以进行DFS遍历。输出的是从该点开始进行DFS时的遍历的顺序。
为了方便起见,在输入v的时候输入的是该点是第几个点而不是它的data。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; typedef struct Matrix{ int vertex[101]; int M[101][101]; }Graph; int n, vis[1001]; int locate(Graph G, int x) { for(int i = 1; i <= n; ++i) { if(G.vertex[i] == x) { return i; } } } void create(Graph &G,int arcnum) { int a,b,w; for(int i = 1; i <= n; ++i) { cin >> G.vertex[i]; } for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) if(i != j) G.M[i][j] = G.M[j][i] = inf; for(int i = 1; i <= arcnum; ++i) { cin >> a >> b >> w; int A = locate(G,a); int B = locate(G,b); G.M[A][B] = G.M[B][A] = w; } } void dfs(Graph G,int v) { cout << v << '\n'; vis[v] = 1; for(int i = 1; i <= n; ++i) { if(!vis[i] && G.M[v][i] != inf) { vis[i] = 1; dfs(G,i); } } } int main() { Graph G; int arcnum, v; cin >> n; cin >> arcnum; create(G,arcnum); cin >> v ; memset(vis,0,sizeof(vis)); dfs(G,v); }
|