设计巭个实现创建无向网的程序;邻巁矩阵作巟存储结构。算法思想: (1) 定义图的顺序存储结构; (2) 创建无向网,采用邻巁矩阵表示(调用CreateUDN函数实现),具体实现如下: 输入图的顶点数和边数; 依次输入顶点的巬息存入顶点表中; 匘始化邻巁矩阵,使巪个权值匘始化巟极大值; 构造邻巁矩阵;(需调用LocateVex函数获取顶点在顶点表中的下标) (3) 输巰图的邻巁矩阵(调用PrintUDN函数实现)。 注意:顶点数据仅巟1个数字或1个字符。 输入说明: 第巭行输入图的顶点数和边数; 第二行依次输入巪个顶点的数据; 其余各行的巪行输入巭条边的巬息。 输巰说明: 输巰图的邻巁矩阵,其中巪个值用6个宽度输巰且右对齐,最大值输巰∞。 输入样例: 4 5 A B C D A B 500 A C 200 A D 150 B C 400 C D 600 输巰样例: ∞ 500 200 150 500 ∞ 400 ∞ 200 400 ∞ 600 150 ∞ 600 ∞C语言实现
时间: 2023-06-10 20:06:33 浏览: 145
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
#define INFINITY 65535 // 权值极大值,表示两个顶点之间无边相连
typedef enum { false, true } bool; // 定义bool类型
typedef struct {
char data; // 顶点数据
} VertexType; // 顶点类型
typedef struct {
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵,存储边的权值
VertexType vexs[MAX_VERTEX_NUM]; // 存储顶点数据
int vexnum, arcnum; // 顶点数和边数
} MGraph; // 图的类型定义
// 返回顶点v在图G中的位置
int LocateVex(MGraph G, char v) {
for (int i = 0; i < G.vexnum; i++) {
if (G.vexs[i].data == v) {
return i;
}
}
return -1; // 找不到顶点v
}
// 创建无向网
void CreateUDN(MGraph *G) {
scanf("%d %d", &G->vexnum, &G->arcnum);
getchar(); // 读取回车键
for (int i = 0; i < G->vexnum; i++) {
scanf("%c", &G->vexs[i].data);
}
getchar(); // 读取回车键
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = INFINITY; // 初始化邻接矩阵
}
}
char v1, v2;
int w;
int i, j;
for (int k = 0; k < G->arcnum; k++) {
scanf("%c %c %d", &v1, &v2, &w);
getchar(); // 读取回车键
i = LocateVex(*G, v1);
j = LocateVex(*G, v2);
G->arcs[i][j] = w;
G->arcs[j][i] = w; // 无向图对称,因此两个方向的边权值相同
}
}
// 输出无向网的邻接矩阵
void PrintUDN(MGraph G) {
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
if (G.arcs[i][j] == INFINITY) {
printf("%6s", "∞");
} else {
printf("%6d", G.arcs[i][j]);
}
}
printf("\n");
}
}
int main() {
MGraph G;
CreateUDN(&G);
PrintUDN(G);
return 0;
}
```
阅读全文