1. c语言编写按键盘输入的数据建立图的邻接矩阵存储。 2. 编写图的深度优先遍历程序。 3. 编写图的广度优先遍历程序。 4. 设计一个选择菜单实现上述的各种基本操作 。
时间: 2024-01-24 15:16:43 浏览: 88
C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
以下是一个基于邻接矩阵的图表示方法的 C 代码示例:
```c
#define MAX_VERTEX_NUM 100 // 定义图中最大顶点数
typedef struct {
char vertex[MAX_VERTEX_NUM]; // 存储顶点信息
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边信息的邻接矩阵
int vertex_num; // 顶点数量
int edge_num; // 边数量
} GraphMatrix;
void CreateGraph(GraphMatrix *G) {
int i, j, k;
printf("请输入顶点数量和边数量:");
scanf("%d%d", &(G->vertex_num), &(G->edge_num));
getchar(); // 读取多余的回车符
printf("请输入顶点信息:");
for (i = 0; i < G->vertex_num; i++) {
scanf("%c", &(G->vertex[i]));
getchar(); // 读取多余的回车符
}
for (i = 0; i < G->vertex_num; i++) {
for (j = 0; j < G->vertex_num; j++) {
G->edges[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入边信息,每行输入两个顶点的编号(从 0 开始):\n");
for (k = 0; k < G->edge_num; k++) {
scanf("%d%d", &i, &j);
G->edges[i][j] = G->edges[j][i] = 1; // 无向图
}
}
void DFS(GraphMatrix G, int v, int visited[]) {
int w;
visited[v] = 1;
printf("%c ", G.vertex[v]);
for (w = 0; w < G.vertex_num; w++) {
if (G.edges[v][w] == 1 && visited[w] == 0) {
DFS(G, w, visited);
}
}
}
void DFSTraverse(GraphMatrix G) {
int i;
int visited[MAX_VERTEX_NUM] = {0}; // 记录顶点是否被访问过
printf("DFS遍历结果:");
for (i = 0; i < G.vertex_num; i++) {
if (visited[i] == 0) {
DFS(G, i, visited);
}
}
printf("\n");
}
void BFSTraverse(GraphMatrix G) {
int i, v, w;
int visited[MAX_VERTEX_NUM] = {0};
int queue[MAX_VERTEX_NUM], front = 0, rear = 0; // 队列实现 BFS
printf("BFS遍历结果:");
for (i = 0; i < G.vertex_num; i++) {
if (visited[i] == 0) {
visited[i] = 1;
printf("%c ", G.vertex[i]);
queue[rear++] = i;
while (front != rear) {
v = queue[front++];
for (w = 0; w < G.vertex_num; w++) {
if (G.edges[v][w] == 1 && visited[w] == 0) {
visited[w] = 1;
printf("%c ", G.vertex[w]);
queue[rear++] = w;
}
}
}
}
}
printf("\n");
}
int main() {
GraphMatrix G;
int choice;
printf("1. 创建图\n2. DFS遍历\n3. BFS遍历\n4. 退出\n");
do {
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
CreateGraph(&G);
break;
case 2:
DFSTraverse(G);
break;
case 3:
BFSTraverse(G);
break;
case 4:
break;
default:
printf("无效的选择!\n");
}
} while (choice != 4);
return 0;
}
```
该程序实现了以下功能:
1. 创建图:读入顶点数量、边数量、顶点信息和边信息,存储为邻接矩阵;
2. DFS遍历:使用递归实现深度优先遍历,并输出遍历结果;
3. BFS遍历:使用队列实现广度优先遍历,并输出遍历结果;
4. 选择菜单:提供以上三种操作和退出选项。
注意:该程序中的顶点信息使用字符类型,顶点编号从 0 开始,输入时需要按照顶点编号输入。
阅读全文