bfs算法c语言
时间: 2023-07-26 07:11:39 浏览: 100
常见数据结构与算法C语言实现
以下是BFS算法的C语言实现代码,假设我们有一个无向图,用邻接矩阵来表示,节点编号从0开始:
```c
#include <stdio.h>
#define MAXN 1000
int n; //节点数
int G[MAXN][MAXN]; //邻接矩阵
int visited[MAXN]; //标记节点是否被访问过
//BFS遍历
void BFS(int start) {
int queue[MAXN], front = 0, rear = 0;
queue[rear++] = start;
visited[start] = 1;
while (front < rear) {
int u = queue[front++];
printf("%d ", u);
for (int v = 0; v < n; ++v) {
if (G[u][v] && !visited[v]) {
visited[v] = 1;
queue[rear++] = v;
}
}
}
}
int main() {
scanf("%d", &n);
//读入邻接矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
scanf("%d", &G[i][j]);
}
}
//BFS遍历
for (int i = 0; i < n; ++i) {
if (!visited[i]) {
BFS(i);
}
}
return 0;
}
```
代码中的BFS函数用于遍历从start节点开始的连通块。visited数组用于标记节点是否被访问过。在BFS中,我们使用一个队列来保存待访问的节点,每次从队列头部取出一个节点进行访问,并将该节点的所有未被访问的相邻节点加入队列尾部,直到队列为空。
阅读全文