实现图的深度优先遍历算法
时间: 2023-12-05 14:41:19 浏览: 75
C语言实现图的深度优先遍历算法可以通过递归或者栈来实现。以下是递归实现的示例代码:
```
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点数组
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
int edge_num; // 边数
} Graph;
bool visited[MAX_VERTEX_NUM]; // 记录顶点是否被访问过
void DFS(Graph *G, int v) {
visited[v] = true; // 标记当前顶点已被访问
printf("%d ", G->vertex[v]); // 输出当前顶点
for (int i = 0; i < G->vertex_num; i++) {
if (G->edge[v][i] == 1 && !visited[i]) { // 如果当前顶点与i相邻且i未被访问
DFS(G, i); // 递归访问i
}
}
}
int main() {
Graph G = {
{1, 2, 3, 4, 5}, // 顶点数组
{
{0, 1, 1, 0, 0},
{1, 0, 0, 1, 1},
{1, 0, 0, 1, 0},
{0, 1, 1, 0, 1},
{0, 1, 0, 1, 0}
}, // 邻接矩阵
5, // 顶点数
7 // 边数
};
for (int i = 0; i < G.vertex_num; i++) {
visited[i] = false; // 初始化visited数组
}
for (int i = 0; i < G.vertex_num; i++) {
if (!visited[i]) { // 如果当前顶点未被访问
DFS(&G, i); // 从当前顶点开始深度优先遍历
}
}
return 0;
}
```
在上面的代码中,我们定义了一个Graph结构体来表示图,其中包括顶点数组、邻接矩阵、顶点数和边数。我们还定义了一个visited数组来记录顶点是否被访问过。在DFS函数中,我们首先标记当前顶点已被访问,然后输出当前顶点,并递归访问与当前顶点相邻且未被访问的顶点。在main函数中,我们初始化visited数组,并从未被访问的顶点开始深度优先遍历。
阅读全文