邻接矩阵存储图的深度优先遍历 代码
时间: 2023-11-20 15:54:04 浏览: 177
以下是邻接矩阵存储图的深度优先遍历的代码实现:
```C++
#define MaxVertexNum 100 // 最大顶点数设为100
typedef char VertexType; // 顶点类型设为字符型
typedef int EdgeType; // 边权值设为整型
typedef struct{
VertexType Vex[MaxVertexNum]; // 顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum];// 邻接矩阵,可看作边表
int vexnum, arcnum; // 图的当前点数和边数/弧数
}MGraph;
bool visited[MaxVertexNum]; // 访问标记数组,初始化为false
// 邻接矩阵的深度优先递归算法
void DFS(MGraph G, int v){
visited[v] = true; // 标记v已访问
printf("%c ", G.Vex[v]); // 输出顶点的数据
for(int i = 0; i < G.vexnum; i++){
if(G.Edge[v][i] != 0 && !visited[i]){
DFS(G, i); // 对访问的邻接顶点递归调用
}
}
}
// 邻接矩阵的深度遍历操作
void DFSTraverse(MGraph G){
for(int i = 0; i < G.vexnum; i++){
visited[i] = false; // 初始化所有顶点状态都是未访问过状态
}
for(int i = 0; i < G.vexnum; i++){
if(!visited[i]){ // 对未访问过的顶点调用DFS,若是连通图,只会执行一次
DFS(G, i);
}
}
}
```
阅读全文