📅  最后修改于: 2023-12-03 14:59:31.025000             🧑  作者: Mango
BFS(Breadth First Search)是一种广度优先搜索算法,应用于图遍历。其核心思想是从起点开始,不断将当前点的未遍历邻居节点加入队列,直到队列为空。它也是图论中最基本的算法之一,经常用于解决最短路径等问题。
在 C 编程语言中,我们可以使用队列和循环来实现 BFS 算法。下面是一个示例代码片段:
#include <stdio.h>
#define MAX 100
int queue[MAX];
int front = -1;
int rear = -1;
int visited[MAX];
void enqueue(int vertex) {
if (rear == MAX - 1) {
printf("Queue overflow!");
} else {
if (front == -1) {
front = 0;
}
rear++;
queue[rear] = vertex;
}
}
int dequeue() {
if (front == -1 || front > rear) {
printf("Queue underflow!");
return -1;
} else {
int vertex = queue[front];
front++;
return vertex;
}
}
void bfs(int adjacency_matrix[MAX][MAX], int vertices, int start_vertex) {
int i, vertex;
enqueue(start_vertex);
visited[start_vertex] = 1;
printf("BFS Traversal: ");
while (front != -1) {
vertex = dequeue();
printf("%d ", vertex);
for (i = 0; i < vertices; i++) {
if (adjacency_matrix[vertex][i] == 1 && visited[i] == 0) {
enqueue(i);
visited[i] = 1;
}
}
}
}
int main() {
int adjacency_matrix[MAX][MAX], vertices, i, j, start_vertex;
printf("\nEnter the number of vertices: ");
scanf("%d", &vertices);
printf("\nEnter the adjacency matrix:\n");
for (i = 0; i < vertices; i++) {
for(j = 0; j < vertices; j++) {
scanf("%d", &adjacency_matrix[i][j]);
}
}
for (i = 0; i < vertices; i++) {
visited[i] = 0;
}
printf("\nEnter the starting vertex: ");
scanf("%d", &start_vertex);
bfs(adjacency_matrix, vertices, start_vertex);
printf("\n");
return 0;
}
在这个例子中,我们使用了一个数组来存储访问过的顶点。我们也有一个 enqueue
函数和一个 dequeue
函数来操作队列。bfs
函数则实现了 BFS 算法。在 main
函数中,我们输入邻接矩阵,调用 bfs
函数,并输出遍历结果。
这段代码简单易懂,但我们需要确保输入的数据是合法的。在实际项目中,需要继续完善代码来处理各种异常情况。