编写一个能够创建4种不同类型图的邻接矩阵存储的通用函数,函数格式如下: CreateMGraph(GraphKind GKind, MGraph &G, int vexnum, int arcnum, char *vexs, int *arcs)
时间: 2024-03-05 17:52:12 浏览: 82
以下是一个能够创建4种不同类型图的邻接矩阵存储的通用函数的实现:
```
#define MAX_VERTEX_NUM 100 // 顶点数的最大值
typedef enum {DG,DN,UDG,UDN} GraphKind; // 图的种类
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 顶点表
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 顶点数和边数
} MGraph;
void CreateMGraph(GraphKind GKind, MGraph &G, int vexnum, int arcnum, char *vexs, int *arcs) {
G.vexnum = vexnum;
G.arcnum = arcnum;
for (int i = 0; i < vexnum; i++) {
G.vexs[i] = vexs[i];
}
for (int i = 0; i < vexnum; i++) {
for (int j = 0; j < vexnum; j++) {
if (i == j) {
G.arcs[i][j] = 0; // 初始化为0
} else {
G.arcs[i][j] = INT_MAX; // 初始化为无穷大
}
}
}
for (int i = 0; i < arcnum; i++) {
int v1 = arcs[i * 3];
int v2 = arcs[i * 3 + 1];
int w = arcs[i * 3 + 2];
G.arcs[v1][v2] = w; // 有向图或有向网
if (GKind == UDG || GKind == UDN) {
G.arcs[v2][v1] = w; // 无向图或无向网
}
}
}
```
函数参数说明:
- GKind:图的种类,取值为DG、DN、UDG或UDN。
- G:用于存储图的邻接矩阵。
- vexnum:图的顶点数。
- arcnum:图的边数。
- vexs:存储图的顶点信息。
- arcs:存储图的边信息,每条边包含3个元素(起点、终点、权值)。
函数实现过程中,首先根据图的顶点数和边数初始化邻接矩阵,然后根据边的信息对邻接矩阵进行更新。如果是无向图或无向网,则需要更新邻接矩阵的对称位置。
阅读全文