c语言中图的广度优先遍历代码
时间: 2024-11-06 15:12:39 浏览: 19
图的建立与图的深度优先、广度优先遍历.cpp
5星 · 资源好评率100%
在C语言中,广度优先搜索(BFS,也称为层次遍历)通常用于寻找最短路径或查找连通分量等场景。以下是使用邻接矩阵表示图的简单BFS算法:
```c
#include <stdio.h>
#define MAX 100 // 图的最大节点数
// 邻接矩阵存储图结构
int graph[MAX][MAX];
// 检查队列是否为空
int isEmpty(int queue[], int size) {
return queue[0] == -1;
}
// 入队操作
void enqueue(int queue[], int item, int size) {
if (size >= MAX) {
printf("Queue overflow\n");
return;
}
for (int i = size; i > 0; i--) {
queue[i] = queue[i - 1];
}
queue[0] = item;
size++;
}
// 出队操作
int dequeue(int queue[], int size) {
if (isEmpty(queue, size)) {
printf("Queue is empty\n");
return -1;
}
int result = queue[0];
queue[0] = queue[size - 1];
size--;
return result;
}
// 广度优先遍历函数
void bfs(int start) {
int visited[MAX] = {0}; // 标记已访问节点
int queue[MAX]; // 存储待访问节点
int size = 0;
// 将起始点放入队列并标记为已访问
queue[size++] = start;
visited[start] = 1;
while (!isEmpty(queue, size)) {
int node = dequeue(queue, size); // 取出队首节点
printf("%d ", node);
// 遍历当前节点的所有邻居
for (int i = 0; i < MAX; i++) {
if (graph[node][i] && !visited[i]) {
enqueue(queue, i, size); // 如果未访问,则入队
visited[i] = 1; // 标记为已访问
}
}
}
}
int main() {
// 初始化图...
bfs(0); // 从节点0开始遍历
return 0;
}
```
在这个例子中,`graph`数组是一个邻接矩阵,其中`graph[node][i]`表示节点`node`到节点`i`是否有边。`bfs`函数会从给定的起始节点开始,逐层遍历所有节点。
阅读全文