离散数学大作业:各城市通信总造价最小

2023-12-12 14:08

本文主要是介绍离散数学大作业:各城市通信总造价最小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 问题描述

下图所示的赋权图表示某七个城市及预先算出它们之间的通信线路造价(单位:万元),试给出一个设计方案,使得各城市之间既能够通信又使总造价最小并计算其最小值.

 

编程求解以上问题(Kruskal算法或Prim算法)

  • Prim基本原理

Prim算法从任意一个顶点开始,每次选择一个与当前顶点集最近的一个顶点,并将两顶点之间的边加入到树中。Prim算法在找当前最近顶点时使用到了贪婪算法。

算法描述:

1. 在一个加权连通图中,顶点集合V,边集合为E

2. 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.

3. 重复以下操作,直到所有点都被标记为visit:

在剩下的点中,计算与已标记visit点距离最小的点,标记visit,证明加入了最小生成树。

流程图:

 

 

  • 实验结果
  1. 程序输出结果

加入生成树集合的边:

v1——v7  权值:1

v7——v2  权值:4

v7——v3  权值:9

v3——v4  权值:3

v4——v5  权值:17

v1——v6  权值:23

总造价最小为57万元

 

  • 通信线路图

  • 实验代码
MAX = 9999
primgraph = [[MAX,  20, MAX, MAX, MAX,  23,   1],[ 20, MAX,  15, MAX, MAX, MAX,   4],[MAX,  15, MAX,   3, MAX, MAX,   9],[MAX, MAX,   3, MAX,  17, MAX,  16],[MAX, MAX, MAX,  17, MAX,  28,  25],[ 23, MAX, MAX, MAX,  28, MAX,  36],[  1,   4,   9,  16,  25,  36, MAX]]
chararray = ['v1','v2','v3','v4','v5','v6','v7']
charlist = []
charlist.append(chararray[0])
mid = []    #mid[i]表示生成树集合中与点i最近的点的编号
lowcost = []    #lowcost[i]表示生成树集合中与点i最近的点构成的边最小权值 ,-1表示i已经在生成树集合中
lowcost.append(-1)
mid.append(0)
n = len(chararray)
for i in range(1,n): #初始化mid数组和lowcost数组lowcost.append(primgraph[0][i])mid.append(0)
sum = 0
for _ in range(1,n): #插入n-1个结点minid = 0min = MAXfor j in range(1,n):  #寻找每次插入生成树的权值最小的结点if(lowcost[j]!=-1 and lowcost[j]<min):minid = jmin = lowcost[j]charlist.append(chararray[minid])print(chararray[mid[minid]]+'——'+chararray[minid]+'权值:'+str(lowcost[minid]))sum+=minlowcost[minid] = -1for j in range(1,n):  #更新插入结点后lowcost数组和mid数组值if(lowcost[j]!=-1 and lowcost[j]>primgraph[minid][j]):lowcost[j] = primgraph[minid][j]mid[j] = minid
print("sum="+str(sum))
print("插入结点顺序:"+str(charlist))

 

这篇关于离散数学大作业:各城市通信总造价最小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484896

相关文章

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri