广度优先算法c语言邻接矩阵
时间: 2024-11-28 08:20:20 浏览: 25
广度优先搜索(Breadth First Search,简称BFS)是一种用于遍历或搜索图数据结构的算法,通常从起始顶点开始,逐层向外探索节点。在C语言中,使用邻接矩阵表示图,BFS可以按以下步骤进行:
1. 初始化:创建一个队列并把起始节点放入队列。同时,用一个二维数组(邻接矩阵)记录每个节点的邻居。
2. 主循环:当队列非空时,执行以下操作:
a. 弹出队首节点作为当前节点。
b. 遍历当前节点的所有邻居,如果它们未访问过,则标记为已访问,并将它们加入队列的尾部。
c. 更新邻接矩阵,以便后续查询邻居。
3. 结束条件:当队列为空,说明已经访问完所有可到达的节点,算法结束。
以下是简单的C语言代码示例,假设`graph`是一个二维数组表示邻接矩阵:
```c
#include <stdio.h>
#include <stdbool.h>
#define ROW 5 // 图的行数(节点数)
#define COL 5 // 图的列数(同样代表节点数)
bool visited[ROW][COL]; // 记录节点是否被访问
// 邻接矩阵中的值表示两个节点间是否有边
void bfs(int start) {
int queue[ROW][COL], front = -1, rear = -1;
queue[++rear] = start; // 入队
visited[start][start] = true;
while (front < rear) {
int u = queue[front++]; // 出队
printf("%d ", u); // 输出节点
for (int v = 0; v < ROW; ++v)
if (!visited[u][v] && graph[u][v]) { // 如果相邻且未访问
queue[++rear] = v; // 入队
visited[u][v] = true;
}
}
}
int main() {
int graph[ROW][COL] = { ... }; // 初始化邻接矩阵
int start_node = 0; // 起始节点
bfs(start_node);
return 0;
}
```
阅读全文