实现图的邻接矩阵的存储 编写程序,输入顶点的个数、边的个数、每个顶点的值、 每一条边及其权值,建立带权无向图 G 的邻接矩阵,并输出其邻接矩阵。 输入格式: 第一行两个整数分别表示图的顶点个数 m、边的个数 n,两个整数之间以空格分隔; 第二行的字符序列分别表示图的 m 个顶点的数据(为简单,每个顶点的数据为一个字符); n 行数据,每行数据表示图的一条边的信息,每条边依附的两个顶点的值以及这条边的权 值。c语言实现
时间: 2024-03-31 16:38:42 浏览: 32
好的,下面是实现图的邻接矩阵存储的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VERTICES 100 // 顶点数的最大值
#define INF 2147483647 // 无穷大
int adj_matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
int main()
{
int m, n, i, j, k, weight;
char vertices[MAX_VERTICES]; // 存储顶点的值
char v1, v2;
scanf("%d%d", &m, &n); // 输入顶点数和边数
// 初始化邻接矩阵
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
adj_matrix[i][j] = INF;
}
adj_matrix[i][i] = 0;
}
// 输入顶点的值
scanf("%s", vertices);
// 输入每条边的信息,构建邻接矩阵
for (k = 0; k < n; k++) {
scanf(" %c %c %d", &v1, &v2, &weight);
i = strchr(vertices, v1) - vertices;
j = strchr(vertices, v2) - vertices;
adj_matrix[i][j] = adj_matrix[j][i] = weight;
}
// 输出邻接矩阵
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
printf("%d ", adj_matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
输入样例:
```
5 7
ABCDE
A B 2
A C 1
B C 3
B D 10
C D 4
C E 5
D E 6
```
输出样例:
```
0 2 1 2147483647 2147483647
2 0 3 10 2147483647
1 3 0 4 5
2147483647 10 4 0 6
2147483647 2147483647 5 6 0
```
阅读全文