实验准备
最小生成树问题,求最小生成树的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算法相关推荐

  1. 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)

    实验一 油管铺设 2018.11.06于CSDN释放 详见GitHub: https://github.com/DolorHunter/PrimAlgorithm 实验准备 最小生成树问题,求最小生成 ...

  2. 合工大离散数学实验 数据输出

    合工大离散数学实验 数据输出 =============================================== 实验准备 理解数据输入.输出的技巧. 实验目的 理解算法设计的数学基本思想 ...

  3. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  4. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  5. 【codevs1078】最小生成树,prim算法

    最小生成树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起 ...

  6. 生成top图_最小生成树(Kruskal和Prim算法)

    文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...

  7. matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现

    Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...

  8. prim算法_最小生成树(Kruskal和Prim算法)

    文章和资源同步更新至微信公众号:算法工程师之路 8月份会开启每日算法题系列,值得期待哦 上一篇文章,我们讲了图的创建和遍历,其中遍历的算法主要有BFS(广度优先算法)和DFS(深度优先算法)两种,并且 ...

  9. 最小生成树——Prim算法

    目录 基本思想 实现 伪代码 实际问题求解 最小生成树:带权连通图的生成树中 边的权值之和最小的那个生成树. 最小生成树不是唯一的.当图中的各边权值互不相等时,最小生成树是唯一的: 若无向连通图本身是 ...

  10. 合工大850参考书_合肥工业大学硕士目录

    1.合工大车辆工程考研科目? 初试科目: 1.(101)思想政治理论 2.(201)英语一或(202)俄语或(203)日语 3.(301)数学一 4.(824)机械设计 复试科目:521 自动控制原理 ...

最新文章

  1. CBNetV2:北大提出的复合主干网络,COCO成绩60.1%
  2. 【移动通信】移动通信基础
  3. oracle重命名日志成员出错,Oracle日志文件
  4. 使用SSH密钥对给你的阿里云ECS加把安全锁
  5. docker网络基础配置
  6. 大数据为什么需要安全分析
  7. Android Multimedia框架总结(十)Stagefright框架之音视频输出过程
  8. Chrome 87 发布,获多年来最大性能提升
  9. CUDA编程入门教程
  10. Linux——Ubuntu使用个给力的镜像,安装软件速度飞快
  11. 用PHP查看微信撤回的消息,[笔记]使用itchat监听微信撤回消息
  12. OPENCV(七)对啤酒盖进行缺陷检测
  13. 详解win10开机启动慢是什么原因怎么解决
  14. Redis Srem 命令
  15. 计算起始时间与结束时间之间有哪些月份和周数
  16. 被装管理系统之出入库流程
  17. 如何安装和使用A-ops工具?
  18. 光收发器安装介绍,光纤收发器连接示意图解
  19. java毕业设计汽车售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
  20. 如何基于nonebot2做一个q群机器人

热门文章

  1. Detours Hook初探
  2. 吉林省学计算机哪所三本好,吉林省2016年三本大学排名
  3. 超级马里奥【附源码】
  4. python图像数字识别
  5. matlab读取jpg图片出错,求助,Matlab读取图片进行分类。出现错误
  6. java面试逻辑题_精选程序员面试常问的逻辑题
  7. python单例模式selenium driver实现单例
  8. JAVA 三个框架结合运用思路_SSM框架的整合与使用——实现简单的转账系统
  9. 模2除法(CRC校验码计算)模2除法和算数除法不同,文中例子120/13用模2除法结果:商11余数7,而算数除法结果:商9余数3
  10. 直通车怎么能不推广计算机设备,直通车智能推广具体怎么设置?如何操作?