c++中广度优先搜索
时间: 2023-12-24 10:03:51 浏览: 82
在C语言中实现广度优先搜索(BFS)算法的一种常见方法是使用队列。下面是一个简单的示例代码:
```c
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
int graph[MAX_QUEUE_SIZE][MAX_QUEUE_SIZE]; // 图的邻接矩阵表示
int visited[MAX_QUEUE_SIZE]; // 记录节点是否已经访问
int queue[MAX_QUEUE_SIZE]; // 用于存储待访问的节点
int front = -1, rear = -1; // 队列的前后指针
void enqueue(int vertex) {
if (rear == MAX_QUEUE_SIZE - 1) {
printf("Queue is full.\n");
return;
}
if (front == -1)
front = 0;
rear++;
queue[rear] = vertex;
}
int dequeue() {
if (front == -1 || front > rear) {
printf("Queue is empty.\n");
return -1;
}
int value = queue[front];
front++;
return value;
}
void breadthFirstSearch(int start, int n) {
visited[start] = 1;
enqueue(start);
while (front != -1) {
int vertex = dequeue();
printf("%d ", vertex);
for (int i = 0; i < n; i++) {
if (graph[vertex][i] && !visited[i]) {
visited[i] = 1;
enqueue(i);
}
}
}
}
int main() {
int n; // 图中节点的数量
printf("Enter the number of nodes: ");
scanf("%d", &n);
printf("Enter the adjacency matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
printf("BFS traversal: ");
breadthFirstSearch(0, n);
return 0;
}
```
这段代码实现了基本的广度优先搜索算法。你可以通过输入图的邻接矩阵来运行该程序,并得到广度优先搜索的结果。在广度优先搜索过程中,队列用于存储待访问的节点,visited数组用于记录节点是否已经访问过。通过不断从队列中取出节点,并将其未访问的邻居节点加入队列,可以完成广度优先搜索。
阅读全文