无向图的深度优先遍历广度优先遍历c语言
时间: 2024-11-28 09:12:22 浏览: 5
图的遍历代码
在C语言中,无向图的深度优先遍历(Depth-First Search, BFS)都是用于搜索图的数据结构算法。
**深度优先遍历(DFS)**:
1. **递归实现**:从起始顶点开始,选择一条未访问的边并深入探索。如果当前节点的所有邻接节点都已访问,则回溯到上一个节点继续处理。
```c
void dfs(int node, int graph[], int visited[]) {
visited[node] = 1;
for (int i = 0; i < num_nodes; i++) {
if (graph[node][i] == 1 && visited[i] == 0)
dfs(i, graph, visited);
}
}
```
2. **栈实现**:可以使用栈数据结构模拟递归过程,将待访问的节点压入栈中。
**广度优先遍历(BFS)**:
1. **队列实现**:从起始顶点开始,首先将其加入队列,然后每次从队列头部取出一个节点,访问其所有邻接节点并将它们加入队列,直到队列为空。
```c
void bfs(int start) {
queue<int> q;
visited[start] = 1;
q.push(start);
while (!q.empty()) {
int curr = q.front();
q.pop();
// Process the current node
for (int neighbor = 0; neighbor < num_nodes; neighbor++) {
if (graph[curr][neighbor] == 1 && visited[neighbor] == 0) {
visited[neighbor] = 1;
q.push(neighbor);
}
}
}
}
```
阅读全文