广度优先搜索的C语言实现
时间: 2024-11-24 21:23:25 浏览: 4
广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或查找树和图中节点的经典算法。在C语言中,BFS通常会用队列数据结构来实现,因为队列的特点是先进先出(FIFO),恰好符合广度优先搜索的顺序。
以下是简单的C语言BFS实现步骤:
1. 定义一个邻接表来存储图的结构,或者用数组表示邻接矩阵。
2. 初始化一个队列,并将起始节点(通常是源点)加入队列。
3. 创建一个布尔数组标记已访问过的节点,初始值都设为`false`。
4. 当队列非空时,循环执行以下操作:
a. 弹出队首节点。
b. 如果该节点未被访问过,则标记为已访问并处理(如打印、添加到结果集合等)。
c. 将该节点的所有邻居(未访问过的)加入队列。
5. 当所有邻居都被处理完后,继续处理下一个节点,直到队列为空。
下面是简化版的C语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX 100
// 图的邻接表表示
typedef struct Node {
int val;
struct Node* next;
} Node;
Node** graph; // 使用动态内存管理
bool visited[MAX];
void bfs(int start) {
Node* queue[MAX] = {NULL};
int front = 0, rear = -1;
queue[++rear] = &graph[start];
visited[start] = true;
while (front <= rear) {
Node* node = queue[front++];
printf("%d ", node->val); // 打印节点值
if (node->next != NULL) {
int adj_val = node->next->val;
if (!visited[adj_val]) {
visited[adj_val] = true;
queue[++rear] = node->next;
}
}
}
}
int main() {
// 初始化图和邻接表...
graph = create_graph(); // 假设create_graph函数负责创建邻接表
int start = 0; // 起始节点
bfs(start);
return 0;
}
```
阅读全文