深度优先遍历c语言代码实例
时间: 2023-10-21 09:04:41 浏览: 93
C例子:深度优先遍历
3星 · 编辑精心推荐
下面是一个C语言的深度优先遍历的代码实例:
```c
#include <stdio.h>
#define MAX_SIZE 100
int flag[MAX_SIZE]; // 定义一个标记数组,用于标记顶点是否已经遍历过
typedef struct {
int Node[MAX_SIZE]; // 顶点数组
int Weight[MAX_SIZE][MAX_SIZE]; // 邻接矩阵表示图的边的权重
} MATRIX;
// 深度优先遍历的递归函数
void DFS_Begin(MATRIX *P, int k, int V) {
int i;
flag[k = 1; // 标记当前顶点,表示已经遍历过
printf("%d ", P->Node[k]); // 输出当前顶点
for(i = 0; i < V; i++) {
if(!flag[i && P->Weight[k][i != 0) { // 如果当前顶点的邻近点存在,且没有遍历过
DFS_Begin(P, i, V); // 递归遍历当前顶点的邻近点
}
}
}
void Init_DFSMatrix(MATRIX *P, int V) {
int i;
// 初始化标记符数组,全为0
for(i = 0; i < V; i++) {
flag[i = 0;
}
for(i = 0; i < V; i++) {
if(!flag[i]) { // 排除遇到已经遍历的顶点
DFS_Begin(P, i, V); // 开始深度遍历
}
}
putchar('\n');
}
int main() {
MATRIX G;
int V = 5; // 顶点的数量
// 初始化顶点和邻接矩阵
G.Node = 'a';
G.Node = 'b';
G.Node = 'c';
G.Node = 'd';
G.Node = 'e';
// 设置边的权重
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
G.Weight = 1;
Init_DFSMatrix(&G, V); // 深度优先遍历
return 0;
}
```
这个代码实例展示了一个使用邻接矩阵表示图的深度优先遍历算法。通过设置顶点数组和邻接矩阵的权重,我们可以创建一个无向图。然后使用深度优先遍历算法遍历整个图,并输出遍历的顶点。
注意,这个代码实例中的顶点标记为'a', 'b', 'c', 'd', 'e',邻接矩阵表示了各个顶点之间的边的权重。你可以根据自己的需要修改顶点和边的数量以及权重。
阅读全文