如何用C语言实现基于邻接矩阵表示的图的深度优先搜索算法?
时间: 2024-10-24 15:07:44 浏览: 22
在C语言中,我们可以使用邻接矩阵来表示图,并通过递归或栈实现深度优先搜索(DFS)。以下是基本的步骤:
1. 定义数据结构:首先,我们需要创建一个二维数组`adj_matrix`作为邻接矩阵,其中`adj_matrix[i][j]`为从顶点i到顶点j是否有边。
2. 初始化:创建一个布尔型数组`visited`,表示各个顶点是否已经访问过。将起始顶点(通常设为0)标记为已访问。
```c
#define V // 图的顶点数
bool visited[V];
visited[start_node] = true;
```
3. 递归深度优先搜索:
- 编写一个名为`dfs`的函数,接收一个参数`node`代表当前访问的顶点。
- 保存未访问的相邻顶点到栈里。
- 当`node`有未访问的邻居时,将其标记为已访问并递归地访问其邻居。
```c
void dfs(int node) {
Stack stack; // 定义一个空栈
push(&stack, node);
while (!isEmpty(stack)) {
int current = top(stack);
if (visited[current]) {
adjacent_nodes: // 查找当前节点的相邻未访问节点
for (int i = 0; i < V; i++) {
if (!visited[i] && adj_matrix[current][i])
push(&stack, i);
}
} else {
visited[current] = true; // 访问当前节点
// 在这里添加实际的遍历逻辑,如打印节点等
process(current);
}
}
pop(&stack); // 移除已经访问过的节点
}
}
```
4. 结束时,记得清理栈和关闭相关的数据结构。
阅读全文