该函数用于创建一个带权无向图。函数中的参数 Mgraph &g 是一个结构体指针,表示图的结构。

函数中的代码逻辑如下:

  1. 获取用户输入的城市数和路线数,并将其分别赋值给 g.numVertexesg.numEdges
  2. 初始化图中每个顶点的编号,将其赋值给 g.vexs[i].num
  3. 获取用户输入的每个城市名称,并将其赋值给 g.vexs[i].city
  4. 初始化图的邻接矩阵,将矩阵中的每个元素都初始化为无穷大 (INFINITY)。
  5. 获取用户输入的每条路径信息,包括起点城市、终点城市和路径长度,并将其赋值给 g.arc[m1][n1],其中 m1n1 分别是起点城市和终点城市在图中的编号。

总的来说,该函数的作用是根据用户的输入,创建一个带权无向图。

代码示例:

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 算法计算图中两点之间的最短路径。

C语言创建带权无向图函数解析: CreateMgraph() 函数详解

原文地址: https://www.cveoy.top/t/topic/o1wT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录