C语言要求用邻接矩阵实现图的存储,并定义图的结构;编写图的邻接矩阵生成算法
时间: 2024-02-05 14:12:51 浏览: 69
C语言实现图的邻接矩阵存储操作
5星 · 资源好评率100%
下面是C语言实现图邻接矩阵存储和生成算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
// 定义图的邻接矩阵结构体
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 存储顶点的数组
int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储邻接矩阵的二维数组
int vexnum, arcnum; // 存储顶点数和边数
} MGraph;
// 初始化邻接矩阵图
void InitMGraph(MGraph *G) {
int i, j;
printf("请输入顶点数和边数:\n");
scanf("%d %d", &G->vexnum, &G->arcnum);
fflush(stdin);
printf("请输入顶点信息:\n");
for (i = 0; i < G->vexnum; i++) {
scanf("%c", &G->vexs[i]);
fflush(stdin);
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->matrix[i][j] = 0; // 初始化邻接矩阵为0
}
}
printf("请输入边信息:\n");
for (i = 0; i < G->arcnum; i++) {
int v1, v2;
printf("请输入第%d条边的两个顶点(用空格隔开):\n", i + 1);
scanf("%d %d", &v1, &v2);
G->matrix[v1][v2] = 1; // 无向图,两个方向都要设置为1
G->matrix[v2][v1] = 1;
}
}
// 邻接矩阵生成算法
void CreateMGraph(MGraph *G) {
InitMGraph(G);
printf("邻接矩阵如下:\n");
int i, j;
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
printf("%d ", G->matrix[i][j]);
}
printf("\n");
}
}
// 主函数
int main() {
MGraph G;
CreateMGraph(&G);
return 0;
}
```
在该示例代码中,我们通过结构体`MGraph`存储了邻接矩阵图的信息,其中`vexs`数组存储图的顶点信息,`matrix`数组存储邻接矩阵,`vexnum`和`arcnum`分别存储图的顶点数和边数。`InitMGraph`函数用于初始化邻接矩阵图,其中通过输入顶点数、边数、顶点信息、边信息等来构建邻接矩阵图。`CreateMGraph`函数则是实现了邻接矩阵生成算法,它调用了`InitMGraph`函数并打印出邻接矩阵。
以上是一个简单的C语言实现邻接矩阵存储和生成算法的示例代码,供参考。
阅读全文