-----------最小生成树----------------
最小生成树(Minimum Spanning Tree)
1:是一棵树(是一种特殊的图)
连通的,没有回路 有V 个顶点 一定有 V-1条边
2:生成树
包含了全部的顶点,所有的V-1条边 都在图里
剩下的三个土 都是第一个完全图的生成树
只要是 4个顶点 3条边 没有回路 就是生成树 这3个图 随便的加一条边 都会变成一个回路 也就不是 最小生成树了.
3:最小
边的权重之和最小
最小生成树存在 和 图连同 是充分必要条件
---------------------------------------------------------------------------------------------------------------------------
不论什么方法解决最小生成树问题都离不开 贪心算法
什么是贪 : 每一步都要最好的 .
什么是好 : 权重最小的边 .
需要约束:
只能用图里面的边.
只能刚好用掉V-1条边
不能有回路
贪心算法之一
Prim算法-让一颗小树长大
用Dijkstra算法和Prim算法比较一下感觉几乎一样
Prime算法 生成树的顺序是V1,V4,V2,V3,V7,V6,V5,
// Dijkstra算法/*依鄙人之见,Dijkstra算法 就是走一个一定最小的步子,走完之后丈量一下去下一个地方需要多少步然后 给那个地方打上标签 这时候 可能会出现 A->B 为80 但是 A->C->B 为 5的情况 所以 在走完第一步之后 在第一部的基础上丈量完 然后走 离现在距离最近的点这个点 该点一定没有 A 离源点近 但是改点是距离 A最近的 就这样 逐步求最小 不停的修改 */ void Dijkstra( Vertex s ) // 看来 再看一遍 写笔记 很重要 { while (1) {V = 未收录顶点中dist 最小者;if ( 这样的V在 不存在 )break;collected[V] = true;for ( V 点 的每个邻接点 W )if ( collected[W] == false )if ( dist[V]+E <V,W> < dist[W] ){dist[W] = dist[V] + E <V,W> ;path[W] = V;}} }
// Prim算法 void Prim() {MST=(s);while(1){V=未收录顶点中dist最小者 // 和源点相邻的就是权重 . 剩下的是正无穷.if(都被收录了)break;dist[V]=0;//将V收录进MST for(V的 每个临接点W){if(dist[W]!=0) //没有被收录 的话 {if(E(v,w)<dist[W]){dist[W]=E(v,w);parent[W]=V;}}}}if(MST中的顶点不到V个) //就是 有独立的点 不连通的图. ERRor(生成树不存在) }
----------------图比较稀疏----------------
// Kruskal算法 //这个算法的核心就是 贪心了 将每一条边 一个一个的收录进去 (不能有回路)(变得个数是点的个数-1)void void Kruskal(Graph G) {MST={}; //生成一个空树while(MST中不到V-1条边&&E中还有边){从E中取一条权重最小的边E(v,w); //用最小堆 将E(v,w)从E中删除;if(E(v,w)不再MST中构成回路) // 用并查集 将E(v,w)加入MTS;else彻底无视E(v,w);}if(MST中不到V-1条边)Error("生成树不存在"); }
转载于:https://www.cnblogs.com/A-FM/p/5153775.html
-----------最小生成树----------------相关推荐
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)
L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...
- 图的算法专题——最小生成树
概要: Prim算法 Kruskal算法 1.Prim算法 算法流程: (1)对图G(V,E)设置集合S来存放已被并入的顶点,然后执行n次(2)(3) (2)每次从未并入顶点集合中选择与集合S最近的一 ...
- 【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理
蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我 ...
- Educational Codeforces Round 9 F. Magic Matrix 最小生成树
F. Magic Matrix 题目连接: http://www.codeforces.com/contest/632/problem/F Description You're given a mat ...
- [vijos1234]口袋的天空最小生成树
题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...
- LA 5717枚举+最小生成树回路性质
1 /*LA 5717 2 <训练指南>P343 3 最小生成树的回路性质 4 在生成的最小生成树上,新增一条边e(u,v) 5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否 ...
- 技术图文:如何利用C# 实现 Prim 最小生成树算法?
背景 我们上一篇图文介绍了 如何利用 C# 实现 Kruskal 最小生成树算法?,Kruskal 算法通过寻找边最优的方式来构造最小生成树,本篇图文介绍如何利用 C# 实现 Prim 最小生成树算法 ...
- 技术图文:如何利用C# 实现 Kruskal 最小生成树算法?
背景 以前我写过一些图文来介绍有关数据结构与算法的知识: 8大排序算法之:直接插入排序(Straight Insertion Sort) 8大排序算法之:希尔插入排序(Shell Insertion ...
最新文章
- linux proxy服务器
- 运维利器:钉钉机器人脚本告警(Linux Shell 篇)
- [云炬创业基础笔记]第九章企业的法律形态测试3
- 最流行的python爬虫框架_Python最火爬虫框架Scrapy入门与实践
- 包含用法 includeFilters
- MapReduce-流量统计求和-分区代码实现
- 真正的高情商,从学会麻烦别人开始
- JSON for java入门总结
- [转]XHTML+CSS兼容性解决方案小集
- 吴恩达机器学习ex8:推荐系统
- 2017 开发者大调查活动获奖名单新鲜出炉
- 武汉理工大学合肥工业大学 计算机,合工大为什么从985降到211?附合肥工业大学211地位(合工大不是985)...
- 是否可以在网络共享磁盘上创建数据库?
- ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
- Php微信拉黑,微信被拉黑或删除?用这个方法强制聊天
- php的seeder是什么,轻松学Laravel6数据填充之方式一Seeder填充
- ios自建服务器降级,iOS14降级操作步骤 iOS14怎么降级到iOS13
- DBO与DB_OWER
- QQ\微信等聊天记录备份与恢复
- SVM算法实现(一)
热门文章
- boost::callable_traits的has_void_return的测试程序
- Boost:以协程的方式实现echo服务器的实例
- Boost:基于Boost的异步TCP回显服务器
- Boost:宏BOOST_TEST_EQ的测试
- ITK:演示所有运算符
- VTK:可视化之ChooseTextColor
- VTK:PolyData之CenterOfMass
- VTK:图片之ImageAnisotropicDiffusion2D
- OpenGL抗锯齿实例
- C语言quaternion(四元数)(附完整源码)