c语言实现图的邻接矩阵的存储 编写程序,输入顶点的个数、边的个数、每个顶点的值、 每一条边及其权值,建立带权无向图 G 的邻接矩阵,并输出其邻接矩阵。
时间: 2024-02-15 11:01:36 浏览: 100
好的,以下是您需要的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 图中最多顶点数
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存储顶点信息
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边信息
int vertex_num; // 顶点个数
int edge_num; // 边个数
} AdjMatrix;
// 初始化邻接矩阵
void init_matrix(AdjMatrix *matrix) {
int i, j;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
matrix->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
matrix->edges[i][j] = 0;
}
}
matrix->vertex_num = 0;
matrix->edge_num = 0;
}
// 向邻接矩阵中添加边
void add_edge(AdjMatrix *matrix, int u, int v, int weight) {
matrix->edges[u][v] = weight;
matrix->edges[v][u] = weight;
matrix->edge_num++;
}
// 创建邻接矩阵
void create_matrix(AdjMatrix *matrix) {
int i, j, u, v, weight;
printf("请输入顶点个数和边个数:");
scanf("%d%d", &matrix->vertex_num, &matrix->edge_num);
printf("请输入每个顶点的值:");
for (i = 0; i < matrix->vertex_num; i++) {
scanf("%d", &matrix->vertex[i]);
}
printf("请输入每条边的起点、终点和权值:\n");
for (i = 0; i < matrix->edge_num; i++) {
scanf("%d%d%d", &u, &v, &weight);
add_edge(matrix, u, v, weight);
}
}
// 打印邻接矩阵
void print_matrix(AdjMatrix *matrix) {
int i, j;
printf("邻接矩阵如下:\n");
for (i = 0; i < matrix->vertex_num; i++) {
for (j = 0; j < matrix->vertex_num; j++) {
printf("%d ", matrix->edges[i][j]);
}
printf("\n");
}
}
int main() {
AdjMatrix matrix;
init_matrix(&matrix);
create_matrix(&matrix);
print_matrix(&matrix);
return 0;
}
```
运行程序时,按照提示输入顶点个数、边个数、每个顶点的值、每一条边及其权值,即可输出对应的邻接矩阵。
阅读全文