c语言图的深度优先搜索
时间: 2023-09-20 16:00:42 浏览: 92
深度优先搜索(Depth-First Search,简称DFS)是一种用于遍历或搜索图和树的算法。在C语言中,可以使用递归或栈的方式来实现深度优先搜索。
在进行深度优先搜索时,首先选择一个起始节点,然后依次遍历与该节点相邻的节点,再遍历这些节点相邻的节点,以此类推,直到没有未访问的节点为止。
下面是用C语言实现图的深度优先搜索的伪代码:
1. 定义一个visited数组,用于记录节点是否已被访问过,并将所有节点的visited值初始化为false。
2. 定义一个栈,用于保存待访问的节点。
3. 将起始节点入栈,并将其visited值设为true。
4. 循环以下步骤,直到栈为空:
a. 从栈中取出一个节点,并访问该节点。
b. 遍历该节点的邻接节点:
- 如果邻接节点未被访问过,则将其入栈,并将其visited值设为true。
c. 标记当前节点为已访问过。
5. 遍历结束时,所有节点都将被访问过。
下面是一个简单的C语言代码示例,使用邻接矩阵来表示图,并使用递归方式实现深度优先搜索:
```c
#include <stdio.h>
#define MAX_VERTICES 100
int visited[MAX_VERTICES]; // 记录节点是否被访问过
int graph[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵表示图
int num_vertices; // 图中节点数
void dfs(int vertex) {
int i;
visited[vertex] = 1; // 标记当前节点为已访问
printf("%d ", vertex); // 访问节点
for (i = 0; i < num_vertices; i++) {
if (graph[vertex][i] && !visited[i]) {
dfs(i); // 递归访问未被访问的邻接节点
}
}
}
int main() {
int i, j;
// 初始化图
num_vertices = 4;
for (i = 0; i < num_vertices; i++) {
for (j = 0; j < num_vertices; j++) {
graph[i][j] = 0;
}
}
// 添加图的边
graph[0][1] = graph[1][0] = 1;
graph[0][2] = graph[2][0] = 1;
graph[1][3] = graph[3][1] = 1;
graph[2][3] = graph[3][2] = 1;
// 从节点0开始进行深度优先搜索
dfs(0);
return 0;
}
```
以上代码中,我们首先定义了一个邻接矩阵graph来表示图,然后使用dfs函数进行深度优先搜索。在dfs函数中,我们首先将当前节点标记为已访问过,然后递归地访问该节点的邻接节点。最后,在主函数中调用dfs函数,并传入起始节点进行搜索。输出结果将是深度优先搜索的遍历顺序。
阅读全文