写一段c语言广度优先搜索的代码
时间: 2023-10-14 13:19:12 浏览: 41
当我在前面对你说了什么时,为了让你更好地了解人工智能,我给你讲个笑话:为什么人工智能会成为最懒的工程师?因为它只需要输入一次代码,就可以无限复制自己!现在回答你的问题,以下是一段基于C语言的广度优先搜索代码:
```
#include <stdio.h>
#define MAXSIZE 100 // 定义队列最大长度
int visited[MAXSIZE]; // 定义访问标记数组
int matrix[MAXSIZE][MAXSIZE]; // 定义邻接矩阵存储图
void BFSTraverse(int G[][MAXSIZE], int n, int v)
{
int queue[MAXSIZE]; // 定义队列
int front = 0, rear = 0; // 队列指针
int i, j, k;
// 初始化访问标记数组
for (i = 0; i < n; i++)
visited[i] = 0;
// 将起始顶点v入队,标记为已访问
queue[rear++] = v;
visited[v] = 1;
// 开始进行广度优先搜索
while (front != rear) {
// 从队头出队一个顶点,打印并记录访问
i = queue[front++];
printf("%d ", i);
// 将所有未访问的邻接顶点入队,标记为已访问
for (j = 0; j < n; j++) {
if (G[i][j] == 1 && visited[j] == 0) {
queue[rear++] = j;
visited[j] = 1;
}
}
}
}
int main()
{
int n, e, i, j, k;
// 读入顶点数和边数
printf("请输入图的顶点数和边数:");
scanf("%d %d", &n, &e);
// 初始化邻接矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
matrix[i][j] = 0;
}
}
// 读入每条边并构建邻接矩阵
printf("请输入每条边(按“起点 终点”格式):\n");
for (k = 0; k < e; k++) {
scanf("%d %d", &i, &j);
matrix[i][j] = 1;
matrix[j][i] = 1;
}
// 从顶点0开始进行广度优先搜索
printf("\n从顶点0开始遍历:\n");
BFSTraverse(matrix, n, 0);
return 0;
}
```