c语言建立一个以邻接矩阵形式存储的图 测试输入: 3 2 A B V A B 2 A V 4 预期输出: ∞ 2 4 2 ∞ ∞ 4 ∞ ∞
时间: 2023-11-22 19:53:54 浏览: 92
以下是使用C语言实现输入邻接矩阵形式存储的图,并输出其邻接矩阵的代码:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAX_VERTEX_NUM 20
#define INFINITY 65535
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 存储顶点的数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储邻接矩阵的二维数组
int vexnum, arcnum; // 图的顶点数和边数
} MGraph;
// 初始化邻接矩阵
void InitMGraph(MGraph *G) {
int i, j;
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = INFINITY; // 先全部置为无穷大
}
G->arcs[i][i] = 0; // 自身到自身距离为0
}
}
// 建图
void CreateMGraph(MGraph *G) {
scanf("%d %d", &(G->vexnum), &(G->arcnum)); // 读入顶点数和边数
getchar(); // 将回车符从缓冲区中取出
int i, j, k, w;
char vex1, vex2;
for (i = 0; i < G->vexnum; i++) {
scanf("%c", &(G->vexs[i])); // 读入顶点
getchar(); // 将回车符从缓冲区中取出
}
InitMGraph(G); // 初始化邻接矩阵
for (k = 0; k < G->arcnum; k++) {
scanf("%c %c %d", &vex1, &vex2, &w); // 读入边的信息
getchar(); // 将回车符从缓冲区中取出
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == vex1) break;
}
for (j = 0; j < G->vexnum; j++) {
if (G->vexs[j] == vex2) break;
}
G->arcs[i][j] = w; // 存储边的权值
G->arcs[j][i] = w; // 无向图需要将(i,j)和(j,i)都存储
}
}
// 输出邻接矩阵
void PrintMGraph(MGraph *G) {
int i, j;
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
if (G->arcs[i][j] == INFINITY) printf("∞ ");
else printf("%-3d ", G->arcs[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateMGraph(&G);
PrintMGraph(&G);
return 0;
}
```
输入测试数据:
```
3 2
A B V
A B 2
A V 4
```
输出:
```
0 2 4
2 0 ∞
4 ∞ 0
```
注意:输入时每行末尾可能会有一个回车符,需要将其从缓冲区中取出,否则这个回车符会被误认为是下一行的输入。
阅读全文