c语言:1、采用图的邻接矩阵存储结构。实现图的遍历操作。即:创建一个连通的无向图。接受键盘输入一个有N个顶点和E条边的无向图,然后用DFS和BFS分别遍历该图。假设顶点从0到N-1编号。进行搜索时,我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数N(0<N<10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。 输出格式 按照”(v1v2...vk)”的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。4
时间: 2024-02-09 13:12:58 浏览: 157
图的邻接表转邻接矩阵和深度遍历
下面是采用邻接矩阵存储图的C语言代码实现,包括DFS和BFS遍历操作:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 10
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
int edge_num; // 边数
} Graph;
void create_graph(Graph *G) { // 创建图
int i, j, k, v1, v2;
printf("请输入图的顶点数和边数:");
scanf("%d%d", &G->vertex_num, &G->edge_num);
for (i = 0; i < G->vertex_num; i++) {
printf("请输入第%d个顶点:", i + 1);
scanf("%d", &G->vertex[i]);
}
for (i = 0; i < G->vertex_num; i++) {
for (j = 0; j < G->vertex_num; j++) {
G->edge[i][j] = 0;
}
}
for (k = 0; k < G->edge_num; k++) {
printf("请输入第%d条边的两个端点:", k + 1);
scanf("%d%d", &v1, &v2);
G->edge[v1][v2] = G->edge[v2][v1] = 1;
}
}
void DFS(Graph G, int *visited, int v) { // 深度优先遍历
int i;
visited[v] = 1;
printf("%d ", G.vertex[v]);
for (i = 0; i < G.vertex_num; i++) {
if (G.edge[v][i] == 1 && visited[i] == 0) {
DFS(G, visited, i);
}
}
}
void BFS(Graph G, int *visited, int v) { // 广度优先遍历
int i, j, queue[MAX_VERTEX_NUM], front = 0, rear = 0;
printf("%d ", G.vertex[v]);
visited[v] = 1;
queue[rear++] = v;
while (front != rear) {
i = queue[front++];
for (j = 0; j < G.vertex_num; j++) {
if (G.edge[i][j] == 1 && visited[j] == 0) {
printf("%d ", G.vertex[j]);
visited[j] = 1;
queue[rear++] = j;
}
}
}
}
void traverse(Graph G) { // 遍历图
int i, visited[MAX_VERTEX_NUM] = {0};
printf("DFS遍历结果:");
for (i = 0; i < G.vertex_num; i++) {
if (visited[i] == 0) {
printf("(");
DFS(G, visited, i);
printf(")\n");
}
}
for (i = 0; i < G.vertex_num; i++) {
visited[i] = 0;
}
printf("BFS遍历结果:");
for (i = 0; i < G.vertex_num; i++) {
if (visited[i] == 0) {
printf("(");
BFS(G, visited, i);
printf(")\n");
}
}
}
int main() {
Graph G;
create_graph(&G);
traverse(G);
return 0;
}
```
该程序采用邻接矩阵存储无向图,并实现了DFS和BFS遍历算法。输入格式为先输入图的顶点数和边数,然后输入每条边的两个端点。输出格式为按照“(v1v2...vk)”的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。
阅读全文