C语言创建带权无向图函数解析: CreateMgraph() 函数详解
该函数用于创建一个带权无向图。函数中的参数 Mgraph &g 是一个结构体指针,表示图的结构。
函数中的代码逻辑如下:
- 获取用户输入的城市数和路线数,并将其分别赋值给
g.numVertexes和g.numEdges。 - 初始化图中每个顶点的编号,将其赋值给
g.vexs[i].num。 - 获取用户输入的每个城市名称,并将其赋值给
g.vexs[i].city。 - 初始化图的邻接矩阵,将矩阵中的每个元素都初始化为无穷大 (INFINITY)。
- 获取用户输入的每条路径信息,包括起点城市、终点城市和路径长度,并将其赋值给
g.arc[m1][n1],其中m1和n1分别是起点城市和终点城市在图中的编号。
总的来说,该函数的作用是根据用户的输入,创建一个带权无向图。
代码示例:
void CreateMgraph(Mgraph &g) {
int i, j;
char m[N], n[N];
int m1, n1;
printf("请输入城市数和路线数:");
scanf("%d%d", &g.numVertexes, &g.numEdges);
for (i = 0; i < g.numVertexes; i++) {
g.vexs[i].num = i;
}
printf("请输入相对应的城市:\n");
for (i = 0; i < g.numVertexes; i++) {
printf("第%d个城市:", i + 1);
scanf("%s", &g.vexs[i].city);
}
for (i = 0; i < g.numVertexes; i++) {
for (j = i; j < g.numVertexes; j++) {
if (i == j) {
g.arc[i][j] = 0;
} else {
g.arc[i][j] = g.arc[j][i] = INFINITY;
}
}
}
printf("\n");
printf("请输入%d条路经信息如下:\n", g.numEdges);
printf("起点城市 终点城市 路径长度\n");
for (i = 0; i < g.numEdges; i++) {
scanf("%s%s", &m, &n);
m1 = zhuanhua(g, m);
n1 = zhuanhua(g, n);
scanf("%d", &g.arc[m1][n1]);
}
}
注释:
zhuanhua(g, m)函数用于将城市名称转换为其在图中的编号。INFINITY是一个宏定义,表示无穷大。- 邻接矩阵
g.arc用于存储图中各顶点之间的路径长度。
注意:
- 该函数假设图的顶点数量和路线数量已知。
- 该函数使用邻接矩阵来表示图,如果图的规模很大,邻接矩阵会占用较大的内存空间。
应用场景: 该函数可用于创建带权无向图,并作为其他图算法的基础。例如,可以在创建图之后,使用 Dijkstra 算法或 Floyd 算法计算图中两点之间的最短路径。
原文地址: https://www.cveoy.top/t/topic/o1wT 著作权归作者所有。请勿转载和采集!