深度优先搜索算法c语言
时间: 2024-11-03 16:07:58 浏览: 16
深度优先搜索算法c语言实现
深度优先搜索(Depth-First Search,简称DFS)是一种用于遍历或搜索树形结构(包括图)的算法。在C语言中,我们可以使用递归或栈数据结构来实现DFS。
**基本思想**:
1. 从根节点开始(如果有的话),选择一个未访问过的邻接节点并标记为已访问。
2. 对选中的节点进行处理(如打印节点值)。
3. 递归地对该节点的所有未访问邻接节点进行DFS。
4. 如果所有节点都已访问过,则返回上一层继续搜索,直到所有路径都被探索完。
**C语言实现(使用递归)**:
```c
#include <stdio.h>
#define MAX 100 // 树的最大节点数
// 假设adj[]是一个邻接列表表示的图,visited[]存储节点是否被访问过
void DFS(int node, int adj[], int visited[]) {
visited[node] = 1; // 标记当前节点已被访问
printf("%d ", node); // 处理节点
for (int i = 0; i < MAX; i++) { // 遍历邻居
if (adj[node][i] && !visited[i]) { // 如果邻居未访问
DFS(i, adj, visited); // 递归访问邻居
}
}
}
int main() {
int graph[MAX][MAX]; // 图的邻接矩阵或者其他数据结构
int visited[MAX] = {0}; // 初始化所有节点为未访问
// 初始化图、设置起点等
DFS(0, graph, visited);
return 0;
}
```
**注意事项**:
- 递归版本需要足够的栈空间来保存函数调用记录,如果图过大可能会导致栈溢出。
- 可以考虑使用非递归方法,通过队列实现广度优先搜索(BFS),但这将涉及额外的数据结构维护。
阅读全文