实现广度优先搜索遍历
时间: 2024-05-25 08:06:20 浏览: 131
广度优先搜索(BFS)是一种图形搜索算法,它从根节点开始遍历整个图,按照距离根节点的距离逐层遍历。在C语言中,可以使用队列来实现BFS算法。
以下是C语言实现BFS的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int graph[MAX_SIZE][MAX_SIZE]; // 图的邻接矩阵
int visited[MAX_SIZE]; // 记录节点是否被访问过
int queue[MAX_SIZE]; // 队列
int front = 0, rear = 0; // 队列的头和尾
void bfs(int start, int n) {
visited[start] = 1; // 标记起始节点已被访问
queue[rear++] = start; // 将起始节点入队
while (front != rear) { // 队列不为空时循环
int cur = queue[front++]; // 取出队首节点
printf("%d ", cur); // 输出当前节点
for (int i = 0; i < n; i++) {
if (graph[cur][i] == 1 && visited[i] == 0) { // 如果当前节点与i节点相邻且i节点未被访问
visited[i] = 1; // 标记i节点已被访问
queue[rear++] = i; // 将i节点入队
}
}
}
}
int main() {
int n, start;
printf("请输入节点数:");
scanf("%d", &n);
printf("请输入起始节点:");
scanf("%d", &start);
printf("请输入邻接矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
printf("BFS遍历结果:");
bfs(start, n);
return 0;
}
```
在上面的代码中,我们使用邻接矩阵来表示图,使用visited数组来记录节点是否被访问过,使用队列来实现BFS算法。在bfs函数中,我们首先将起始节点标记为已访问,并将其入队。然后,我们循环取出队首节点,输出当前节点,并将与当前节点相邻且未被访问的节点入队并标记为已访问。最后,当队列为空时,BFS遍历结束。
阅读全文