【问题描述】 城市之间的公路交通可以用一个无向图表示。如下图所示: image.png 顶点表示城市、边表示城市之间有公路相连,边上的权值表示城市之间的公路长度。 编程解决以下问题: (1)输入城市信息和城市之间公路的信息,建立图的邻接矩阵存储结构 (2)为了使城市之间能够通信,将沿公路铺设光纤,给出合理的方案,使得光纤总耗费最小。 【输入形式】 第一行输入城市,城市之间用空格分开,输入q结束。 后面若干行,每行输入两座城市及城市间的公路长度,用空格分开。输入q结束。 输入起点城市名称。 【输出形式】起点城市出发得到的最小生成树,输出格式为(起点城市, 终点城市). 注:城市之间是英文逗号,并且没有空格。 【样例输入】 成都 西安 昆明 贵阳 武汉 株洲 q 成都 西安 842 成都 昆明 1100 成都 贵阳 967 西安 武汉 740 贵阳 武汉 1042 贵阳 株洲 607 武汉 株洲 409 q 成都 【样例输出】 (成都,西安) (西安,武汉) (武汉,株洲) (株洲,贵阳) (成都,昆明)

时间: 2024-02-25 19:58:39 浏览: 31
以下是Prim算法求解最小生成树的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 #define INF 0x3f3f3f3f // 存储图的邻接矩阵 int graph[MAX][MAX]; // 存储城市名称 char cities[MAX][MAX]; // 存储城市数量 int n; // Prim算法求最小生成树 void prim(int start) { int i, j, k; int min, sum = 0; int lowcost[MAX], closest[MAX], visited[MAX]; // 初始化 for (i = 0; i < n; i++) { lowcost[i] = graph[start][i]; closest[i] = start; visited[i] = 0; } visited[start] = 1; // n-1次循环,每次加入一个新的顶点 for (i = 1; i < n; i++) { min = INF; // 找到离当前生成树最近的顶点 for (j = 0; j < n; j++) { if (!visited[j] && lowcost[j] < min) { min = lowcost[j]; k = j; } } // 输出当前加入的边 printf("(%s,%s)\n", cities[closest[k]], cities[k]); sum += min; visited[k] = 1; // 更新距离和最小的顶点 for (j = 0; j < n; j++) { if (!visited[j] && graph[k][j] < lowcost[j]) { lowcost[j] = graph[k][j]; closest[j] = k; } } } printf("总耗费:%d\n", sum); } int main() { int i, j, len; char city1[MAX], city2[MAX]; int len1, len2, dist; // 输入城市名称 n = 0; while (1) { scanf("%s", cities[n]); if (strcmp(cities[n], "q") == 0) break; n++; } // 初始化邻接矩阵 for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { graph[i][j] = INF; } } // 输入城市之间的公路长度 while (1) { scanf("%s", city1); if (strcmp(city1, "q") == 0) break; scanf("%s%d", city2, &dist); // 查找城市名称对应的下标 for (i = 0; i < n; i++) { if (strcmp(cities[i], city1) == 0) { len1 = i; } if (strcmp(cities[i], city2) == 0) { len2 = i; } } // 更新邻接矩阵 graph[len1][len2] = graph[len2][len1] = dist; } // 输入起点城市名称 scanf("%s", city1); // 查找起点城市的下标 for (i = 0; i < n; i++) { if (strcmp(cities[i], city1) == 0) { len = i; break; } } // 求解最小生成树 prim(len); return 0; } ``` 该代码使用邻接矩阵存储图,其中`graph[i][j]`表示顶点i和j之间的距离。`cities`数组用来存储城市名称,`n`表示城市数量。`prim`函数是使用Prim算法求解最小生成树的函数,参数`start`表示起点。该函数使用了三个辅助数组:`lowcost`数组表示顶点到当前生成树的最小距离,`closest`数组表示距离当前生成树最近的顶点,`visited`数组表示顶点是否已经加入到生成树中。算法的核心部分是每次选择离当前生成树最近的顶点,并将该顶点加入到生成树中,同时更新与该顶点相邻的顶点的距离和最小值和最近的顶点。最终输出生成树的边和总耗费。

相关推荐

最新推荐

recommend-type

css3实现一个div设置多张背景图片及background-image属性实例演示

主要介绍了css3实现一个div设置多张背景图片及background-image属性,同时对于css3背景渐变也做了详细的解释,水平渐变,左上角渐变等等方式,需要的朋友可以参考下
recommend-type

使用npy转image图像并保存的实例

主要介绍了使用npy转image图像并保存的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

解决python cv2.imread 读取中文路径的图片返回为None的问题

使用PIL读取图像,能够成功读取图片,借此了解图片的大小和格式,代码如下图所示: cv.imread函数能够成功读取非中文路径的图片,所以就想到是不是中文路径的问题,opencv中opencv不接受non-ascii的路径,解决方法...
recommend-type

python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图

主要介绍了python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

WPF获得PNG图片外观Path数据.docx

WPF获得PNG图片转为外观Path数据:主要是把图片png格式转为WPF使用的path格式使用,可以快速解决,程序员自己画图的能力。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

云原生架构与soa架构区别?

云原生架构和SOA架构是两种不同的架构模式,主要有以下区别: 1. 设计理念不同: 云原生架构的设计理念是“设计为云”,注重应用程序的可移植性、可伸缩性、弹性和高可用性等特点。而SOA架构的设计理念是“面向服务”,注重实现业务逻辑的解耦和复用,提高系统的灵活性和可维护性。 2. 技术实现不同: 云原生架构的实现技术包括Docker、Kubernetes、Service Mesh等,注重容器化、自动化、微服务等技术。而SOA架构的实现技术包括Web Services、消息队列等,注重服务化、异步通信等技术。 3. 应用场景不同: 云原生架构适用于云计算环境下的应用场景,如容器化部署、微服务
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。