用C编写程序,对无向图G进行深度优先遍历,输出遍历结果
时间: 2023-07-18 16:24:38 浏览: 125
c语言 无向图的深度优先遍历算法实现
5星 · 资源好评率100%
好的,以下是使用 C 语言编写的无向图深度优先遍历的程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_VERTICES 100
// 定义邻接表结构体
typedef struct node {
int vertex;
struct node* next;
} node_t;
node_t* graph[MAX_VERTICES] = { NULL };
bool visited[MAX_VERTICES] = { false };
// 添加边到邻接表中
void add_edge(int u, int v) {
node_t* node = malloc(sizeof(node_t));
node->vertex = v;
node->next = graph[u];
graph[u] = node;
}
// 深度优先遍历函数
void dfs(int v) {
visited[v] = true;
printf("%d ", v);
node_t* node = graph[v];
while (node != NULL) {
int w = node->vertex;
if (!visited[w]) {
dfs(w);
}
node = node->next;
}
}
int main() {
// 添加边到图中
add_edge(0, 1);
add_edge(0, 2);
add_edge(1, 3);
add_edge(1, 4);
add_edge(2, 5);
add_edge(2, 6);
add_edge(3, 7);
add_edge(4, 7);
add_edge(5, 7);
add_edge(6, 7);
// 从节点 0 开始进行深度优先遍历
dfs(0);
return 0;
}
```
在上面的程序中,我们使用了邻接表来表示无向图。我们首先定义了一个邻接表的结构体,包含了一个顶点和一个指向下一个节点的指针。然后我们定义了一个数组 `graph` 来存储邻接表。在 `add_edge` 函数中,我们将边添加到邻接表中。在 `dfs` 函数中,我们标记当前节点为已访问,然后输出当前节点。接着遍历当前节点的邻居节点,如果邻居节点未被访问,则递归访问它。这样就可以遍历整个无向图了。
程序输出的遍历结果为:0 1 3 7 4 2 5 6
阅读全文