1-6 实现基于邻接矩阵表示的深度优先遍历
分数 4
作者 王东
单位 贵州师范学院
实现基于邻接矩阵表示的深度优先遍历。
函数接口定义:
1
| void DFS(Graph G, int v);
|
其中 G 是基于邻接矩阵存储表示的无向图,v表示遍历起点。。
裁判测试程序样例:
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
| #include <stdio.h> #include <stdlib.h> #define MVNum 10 int visited[MVNum]; typedef struct{ char vexs[MVNum]; int arcs[MVNum][MVNum]; int vexnum,arcnum; }Graph; void CreateUDN(Graph &G); void DFS(Graph G, int v); void DFSTraverse(Graph G){ int v; for(v = 0; v < G.vexnum; ++v) visited[v] = 0; for(v = 0; v < G.vexnum; ++v) if(!visited[v]) DFS(G, v); } int main(){ Graph G; CreateUDN(G); DFSTraverse(G); return 0; }
|
输入样例:
输入第1行为结点数vexnum和边数arcnum。第2行为结点的值,依次输入arcnum行,每行输入两个结点的值表示该两个结点互为邻接点。
1 2 3 4 5 6 7 8 9 10
| 8 8 ABCDEFGH A B A C B D B E C F C G D H E H
|
输出样例:
遍历序列。

我的正确答案
1 2 3 4 5 6 7 8 9 10 11
| #include <iostream> using namespace std; void DFS(Graph G, int v) { visited[v] = 1; cout << G.vexs[v] << " "; for (int i = 0; i < G.vexnum; i++) { if (G.arcs[v][i] == 1 && !visited[i]) { DFS(G, i); } } }
|