油管铺设 离散数学 合工大 prim算法
实验准备
最小生成树问题,求最小生成树的Prim算法
实验目的
运用最小生成树思想和求最小生成树程序解决实际问题
实验过程
八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。问从海岸经1号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?
从~到 2 3 4 5 6 7 8
1 1.3 2.1 0.9 0.7 1.8 2.0 1.8
2 0.9 1.8 1.2 2.8 2.3 1.1
3 2.6 1.7 2.5 1.9 1.0
4 0.7 1.6 1.5 0.9
5 0.9 1.1 0.8
6 0.6 1.0
7 0.5
当初网上搜了一下发现没有prim算法的c++实现代码,有也写的特别烂。于是自己动手,丰衣足食,同时造福各位同学。
请不要用上古版本的c++运行代码,推荐使用vs2019
#include<iostream>
using namespace std;class MGraph {public:int vex[8] = { 1,2,3,4,5,6,7,8 };double edge[8][8] = {0.0, 1.3, 2.1, 0.9, 0.7, 1.8, 2.0, 1.8,1.3, 0.0, 0.9, 1.8, 1.2, 2.8, 2.3, 1.1,2.1, 0.9, 0.0, 2.6, 1.7, 2.5, 1.9, 1.0,0.9, 1.8, 2.6, 0.0, 0.7, 1.6, 1.5, 0.9,0.7, 1.2, 1.7, 0.7, 0.0, 0.9, 1.1, 0.8,1.8, 2.8, 2.5, 1.6, 0.9, 0.0, 0.6, 1.0,2.0, 2.3, 1.9, 1.5, 1.1, 0.6, 0.0, 0.5,1.8, 1.1, 1.0, 0.9, 0.8, 1.0, 0.5, 0.0};static const int vexnum = 8;
};
void Prim(MGraph g, int v0, int& sum);/*
v0是初始化的起始点
v是另一个顶点
sum是记录所有走过的路径权值之和
lowcost是记录从当前所有已加入的点中,到未加入的点中的最短距离
min是记录一个临时比较的值。它用来辅助比较出最小的最短距离
vset是顶点集,标为0代表还没有被算过(走过),标为1代表已经被算过(走过)了。
*/void Prim(MGraph g, int v0, double& sum) {int vset[8], v;double lowcost[8], min;int i, j, k;v = v0;cout << "起始点:" << g.vex[v0] << endl <<"下面按顺序依次通过:" << endl;//现在把最小权值记录为从初始点出发的边的权值,并把所有点标记为0,代表还没算过for (i = 0; i < g.vexnum; ++i) {lowcost[i] = g.edge[v0][i];vset[i] = 0;}vset[v0] = 1;//初始点标为1,表示算过了sum = 5;for (i = 0; i < g.vexnum - 1; ++i) {min = 1000;//下面从当前生成树到其余顶点最短边中权值最小的一条for (j = 0; j < g.vexnum; ++j) {if (vset[j] == 0 && lowcost[j] < min) {min = lowcost[j];k = j;}}vset[k] = 1;//找到后记为1v = k;cout << "通过点" << g.vex[v] << " 当前点权值为:" << min << endl;sum += min;//下面是 以刚加入的顶点v为中介点,更新所有最短边的权值for (j = 0; j < g.vexnum; ++j) {if (vset[j] == 0 && g.edge[v][j] < lowcost[j]) {lowcost[j] = g.edge[v][j];}} }cout << "所有路径总和为:" << sum << "(已经加上了从海岸到1的长度5km)" << endl;
}int main(void) {MGraph g;/*g.edge = {0.0, 1.3, 2.1, 0.9, 0.7, 1.8, 2.0, 1.8,1.3, 0.0, 0.9, 1.8, 1.2, 2.8, 2.3, 1.1,2.1, 0.9, 0.0, 2.6, 1.7, 2.5, 1.9, 1.0,0.9, 1.8, 2.6, 0.0, 0.7, 1.6, 1.5, 0.9,0.7, 1.2, 1.7, 0.7, 0.0, 0.9, 1.1, 0.8,1.8, 2.8, 2.5, 1.6, 0.9, 0.0, 0.6, 1.0,2.0, 2.3, 1.9, 1.5, 1.1, 0.6, 0.0, 0.5,1.8, 1.1, 1.0, 0.9, 0.8, 1.0, 0.5, 0.0};g.vex = { 1,2,3,4,5,6,7,8 };*/double sum = 0; int v0 = 0;Prim(g,v0,sum);return 0;
}
油管铺设 离散数学 合工大 prim算法相关推荐
- 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)
实验一 油管铺设 2018.11.06于CSDN释放 详见GitHub: https://github.com/DolorHunter/PrimAlgorithm 实验准备 最小生成树问题,求最小生成 ...
- 合工大离散数学实验 数据输出
合工大离散数学实验 数据输出 =============================================== 实验准备 理解数据输入.输出的技巧. 实验目的 理解算法设计的数学基本思想 ...
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- 【codevs1078】最小生成树,prim算法
最小生成树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起 ...
- 生成top图_最小生成树(Kruskal和Prim算法)
文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...
- matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现
Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...
- prim算法_最小生成树(Kruskal和Prim算法)
文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...
- 最小生成树——Prim算法
目录 基本思想 实现 伪代码 实际问题求解 最小生成树:带权连通图的生成树中 边的权值之和最小的那个生成树. 最小生成树不是唯一的.当图中的各边权值互不相等时,最小生成树是唯一的: 若无向连通图本身是 ...
- 合工大850参考书_合肥工业大学硕士目录
1.合工大车辆工程考研科目? 初试科目: 1.(101)思想政治理论 2.(201)英语一或(202)俄语或(203)日语 3.(301)数学一 4.(824)机械设计 复试科目:521 自动控制原理 ...
最新文章
- CBNetV2:北大提出的复合主干网络,COCO成绩60.1%
- 【移动通信】移动通信基础
- oracle重命名日志成员出错,Oracle日志文件
- 使用SSH密钥对给你的阿里云ECS加把安全锁
- docker网络基础配置
- 大数据为什么需要安全分析
- Android Multimedia框架总结(十)Stagefright框架之音视频输出过程
- Chrome 87 发布,获多年来最大性能提升
- CUDA编程入门教程
- Linux——Ubuntu使用个给力的镜像,安装软件速度飞快
- 用PHP查看微信撤回的消息,[笔记]使用itchat监听微信撤回消息
- OPENCV(七)对啤酒盖进行缺陷检测
- 详解win10开机启动慢是什么原因怎么解决
- Redis Srem 命令
- 计算起始时间与结束时间之间有哪些月份和周数
- 被装管理系统之出入库流程
- 如何安装和使用A-ops工具?
- 光收发器安装介绍,光纤收发器连接示意图解
- java毕业设计汽车售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
- 如何基于nonebot2做一个q群机器人
热门文章
- Detours Hook初探
- 吉林省学计算机哪所三本好,吉林省2016年三本大学排名
- 超级马里奥【附源码】
- python图像数字识别
- matlab读取jpg图片出错,求助,Matlab读取图片进行分类。出现错误
- java面试逻辑题_精选程序员面试常问的逻辑题
- python单例模式selenium driver实现单例
- JAVA 三个框架结合运用思路_SSM框架的整合与使用——实现简单的转账系统
- 模2除法(CRC校验码计算)模2除法和算数除法不同,文中例子120/13用模2除法结果:商11余数7,而算数除法结果:商9余数3
- 直通车怎么能不推广计算机设备,直通车智能推广具体怎么设置?如何操作?