c语言实现图的邻接矩阵的存储 编写程序,输入顶点的个数、边的个数、每个顶点的值、 每一条边及其权值,建立带权无向图 G 的邻接矩阵,并输出其邻接矩阵。每个顶点的数据为一个字符
时间: 2024-02-15 07:01:41 浏览: 69
数据结构-c语言-带main函数-图7.2-图的存储结构-图的邻接矩阵的创建-无向图。
好的,下面是 C 语言实现图的邻接矩阵存储并输出的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 定义图的邻接矩阵结构体
typedef struct {
char vertex[MAX_VERTEX_NUM]; // 存储顶点数据
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的权值
int vertex_num; // 顶点个数
int edge_num; // 边的个数
} Graph;
// 创建图的邻接矩阵
void createGraph(Graph* G) {
printf("请输入顶点个数和边的个数:\n");
scanf("%d%d", &G->vertex_num, &G->edge_num);
getchar(); // 去掉缓冲区中的换行符
printf("请输入每个顶点的值:\n");
for (int i = 0; i < G->vertex_num; i++) {
scanf("%c", &G->vertex[i]);
getchar(); // 去掉缓冲区中的换行符
}
// 初始化邻接矩阵
for (int i = 0; i < G->vertex_num; i++) {
for (int j = 0; j < G->vertex_num; j++) {
G->arc[i][j] = 0;
}
}
// 输入每一条边及其权值
printf("请输入每一条边及其权值:\n");
for (int i = 0; i < G->edge_num; i++) {
char v1, v2;
int weight;
printf("请输入第%d条边的两个顶点和权值:\n", i + 1);
scanf("%c%c%d", &v1, &v2, &weight);
getchar(); // 去掉缓冲区中的换行符
int index1, index2;
// 查找顶点 v1 和 v2 在顶点数组中的下标
for (int j = 0; j < G->vertex_num; j++) {
if (G->vertex[j] == v1) {
index1 = j;
}
if (G->vertex[j] == v2) {
index2 = j;
}
}
// 将边的权值存入邻接矩阵中
G->arc[index1][index2] = weight;
G->arc[index2][index1] = weight;
}
}
// 输出图的邻接矩阵
void printGraph(Graph G) {
printf("图的邻接矩阵为:\n");
for (int i = 0; i < G.vertex_num; i++) {
for (int j = 0; j < G.vertex_num; j++) {
printf("%d ", G.arc[i][j]);
}
printf("\n");
}
}
int main() {
Graph G;
createGraph(&G);
printGraph(G);
return 0;
}
```
希望能对你有所帮助!
阅读全文