广度优先遍历c语言
时间: 2023-06-21 19:20:59 浏览: 87
广度优先遍历(BFS)是一种图或树的遍历算法,其思想是从起点开始,按照距离递增的顺序依次访问与其相邻的节点,直到所有节点都被访问为止。以下是一个使用C语言实现BFS的示例代码:
```
#include <stdio.h>
#include <stdbool.h>
#define MAX_NODES 100
bool visited[MAX_NODES];
int queue[MAX_NODES];
int front = 0, rear = 0;
void bfs(int graph[][MAX_NODES], int nodes, int start) {
visited[start] = true;
queue[rear++] = start;
while (front < rear) {
int curr = queue[front++];
printf("%d ", curr);
for (int i = 0; i < nodes; i++) {
if (graph[curr][i] && !visited[i]) {
visited[i] = true;
queue[rear++] = i;
}
}
}
}
int main() {
int graph[MAX_NODES][MAX_NODES];
int nodes, edges, start;
// 读入图的节点数、边数和起点
scanf("%d %d %d", &nodes, &edges, &start);
// 初始化邻接矩阵
for (int i = 0; i < nodes; i++) {
for (int j = 0; j < nodes; j++) {
graph[i][j] = 0;
}
}
// 读入图的边并构建邻接矩阵
for (int i = 0; i < edges; i++) {
int u, v;
scanf("%d %d", &u, &v);
graph[u][v] = graph[v][u] = 1;
}
// 初始化visited数组
for (int i = 0; i < nodes; i++) {
visited[i] = false;
}
// 调用BFS函数
bfs(graph, nodes, start);
return 0;
}
```
以上代码中,`graph` 是一个邻接矩阵,用于存储图的边信息。`visited` 数组用于记录每个节点是否被访问过。`queue` 数组用于存储待访问的节点。BFS算法的核心是 `bfs` 函数,它从起点 `start` 开始遍历图。在遍历过程中,每访问一个节点都将其标记为已访问,并将其相邻的未访问节点加入队列。在队列中,先加入的节点先被访问,保证了按照距离递增的顺序遍历图。
阅读全文