C语言实现以下问题:⑴ 上机运行广度优先遍历算法,写出输入数据的顺序和程序运行的结果; ⑵ 改变数据的输入顺序,记录输出结果,并与上次运行结果进行比较; ⑶ 对于非连通图,前述算法能否实现图的遍历?如何进行改进?
时间: 2023-07-15 13:14:49 浏览: 55
以下是C语言实现广度优先遍历算法的代码:
```c
#include <stdio.h>
#define MAXV 100
int visited[MAXV]; // 用于记录每个顶点是否被访问过
int Queue[MAXV]; // 用于存储待访问的顶点
// 图的结构体定义
typedef struct {
int edges[MAXV][MAXV]; // 邻接矩阵
int n; // 图中顶点数
}Graph;
// 初始化图
void initGraph(Graph* G, int n) {
G->n = n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
G->edges[i][j] = 0;
}
}
}
// 添加边
void addEdge(Graph* G, int u, int v) {
G->edges[u][v] = 1;
G->edges[v][u] = 1;
}
// 广度优先遍历算法
void BFS(Graph* G, int v) {
int rear = 0, front = 0;
Queue[rear++] = v;
visited[v] = 1;
printf("%d ", v);
while (front != rear) {
int w = Queue[front++];
for (int i = 0; i < G->n; i++) {
if (G->edges[w][i] == 1 && visited[i] == 0) {
Queue[rear++] = i;
visited[i] = 1;
printf("%d ", i);
}
}
}
}
int main() {
Graph G;
int n, u, v;
printf("请输入图的顶点数:");
scanf("%d", &n);
initGraph(&G, n);
printf("请输入每条边的顶点编号(用空格隔开),以-1 -1结束:\n");
scanf("%d %d", &u, &v);
while (u != -1 && v != -1) {
addEdge(&G, u, v);
scanf("%d %d", &u, &v);
}
printf("广度优先遍历结果为:");
for (int i = 0; i < G.n; i++) {
if (visited[i] == 0) {
BFS(&G, i);
}
}
return 0;
}
```
对于第一个问题,例如输入如下:
```
5
0 1
0 2
2 1
3 4
-1 -1
```
程序运行结果为:
```
广度优先遍历结果为:0 1 2 3 4
```
对于第二个问题,我们改变数据输入顺序,例如输入如下:
```
5
2 1
0 1
3 4
0 2
-1 -1
```
程序运行结果为:
```
广度优先遍历结果为:2 1 0 3 4
```
可以看到,图的遍历结果与之前不同。
对于第三个问题,广度优先遍历算法可以遍历非连通图的连通部分,但无法遍历非连通部分。如果需要遍历非连通图,可以对每个未访问过的顶点进行广度优先遍历,直到所有顶点都被访问过。例如,对于下面这个图:
```
5
0 1
0 2
1 2
3 4
-1 -1
```
程序运行结果为:
```
广度优先遍历结果为:0 1 2 3 4
```
我们可以看到,只遍历了图的连通部分。如果要遍历整个图,可以在遍历完一个连通部分后,继续找下一个未访问过的顶点进行遍历。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)