实现基于邻接矩阵表示的深度优先遍历。
函数接口定义:
void DFS(Graph G, int v);
其中 G
是基于邻接矩阵存储表示的无向图,v
表示遍历起点。。
裁判测试程序样例:
#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行,每行输入两个结点的值表示该两个结点互为邻接点。
8 8
ABCDEFGH
A B
A C
B D
B E
C F
C G
D H
E H
输出样例:
遍历序列。
A B D H E C F G
函数如下:
void DFS(Graph G, int v)
{
visited[v]=1;//状态重置为1
printf("%c ",G.vexs[v]);//访问打印顶点v;
for(int i=0;i<G.vexnum;i++)
{
if(G.arcs[i][v]!=0&&visited[i]==0)//边存在且顶点未被遍历
{
DFS(G,i);//递归遍历
}
}
}