ACM 最小生成树 Constructing Roads
来源:互联网 发布:老九门里面的软件 编辑:程序博客网 时间:2024/06/06 02:17
最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。
最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。
例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
Prim算法简述
图例描述:
算法简单描述
1).记Graph中有v个顶点,e个边
2).新建图Graphnew,Graphnew中拥有原图中相同的e个顶点,但没有边
3).将原图Graph中所有e个边按权值从小到大排序
4).循环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中
if (这条边连接的两个节点于图Graphnew中不在同一个连通分量中)
添加这条边到图Graphnew中
图例描述:
首先第一步,我们有一张图Graph,有若干点和边
将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。资源排序,对局部最优的资源进行选择,排序完成后,我们率先选择了边AD。这样我们的图就变成了右图
在剩下的变中寻找。我们找到了CE。这里边的权重也是5
依次类推我们找到了6,7,7,即DF,AB,BE。
下面继续选择, BC或者EF尽管现在长度为8的边是最小的未选择的边。但是现在他们已经连通了(对于BC可以通过CE,EB来连接,类似的EF可以通过EB,BA,AD,DF来接连)。所以不需要选择他们。类似的BD也已经连通了(这里上图的连通线用红色表示了)。
伪代码
- ACM 最小生成树 Constructing Roads
- 【最小生成树】Constructing Roads
- POJ 2421 Constructing Roads(最小生成树)
- POJ2421 Constructing Roads [最小生成树 prim]
- HDOJ 1102 Constructing Roads(最小生成树)
- POJ 2421 Constructing Roads 最小生成树
- Constructing Roads(最小生成树)
- POJ 2421 Constructing Roads 最小生成树
- hdu1102 Constructing Roads 最小生成树+prim
- POJ 2421 Constructing Roads 最小生成树
- hdu1102 Constructing Roads 最小生成树Prim
- HDU1102 Constructing Roads 最小生成树
- hdu 1102 Constructing Roads 最小生成树
- Constructing Roads - HDU 1102 最小生成树
- hdu1102 Constructing Roads 最小生成树Prim
- hdu 1102 Constructing Roads 最小生成树
- Hdu1102 - Constructing Roads - 最小生成树
- HDU1102 Constructing Roads 【最小生成树Prim】
- Java树的数组简单实现
- 【求和排序问题】手机游戏LoveLive!学园偶像祭 Java编写活动小工具Medley Festival最强刷分组合计算小程序(1)
- 7个增强 PHP 程序安全函数
- 老火 给大家说两句自己简单实现秒杀思路
- 设置shader中的变量
- ACM 最小生成树 Constructing Roads
- webstorm安装
- hibernate annotation 之mappedBy 与 @JoinColumn区别
- 微信第三方登录
- ActiveMQ笔记(5):JMX监控
- 【蓝桥】算法提高 队列操作
- 自定义接口内部类的一个简单的使用(跨类传值)
- Jedis API操作Redis数据库入门
- POJ2195-Going Home(最小费用流)