最小生成树之prim算法
一 背景
二 prim算法java版
package leaning.graph;/** 最小生成树之普里姆算法* */
public class PrimMiniCostSpanningTree {//总权值private int totalCounter = 0 ; //总权值StringBufferprivate StringBuffer stringBuffer = new StringBuffer();//计数器private int counter =0;//最大Int整数,表示无穷大private int MAX_VALUE = Integer.MAX_VALUE;//定义地图变量private int map[][] = new int[9][9]; //定义节点private String nodes[] = {"vo","v1","v2","v3","v4","v5","v6","v7","v8"};//保存相关顶点边的权值private int lowCost[] = new int[9];//保存相关顶点下标private int adjvex[] = new int[9];public PrimMiniCostSpanningTree(){this.init();}//初始化地图public void initMap(){this.map[0] = new int[]{ 0, 10,MAX_VALUE,MAX_VALUE,MAX_VALUE, 11,MAX_VALUE,MAX_VALUE,MAX_VALUE};this.map[1] = new int[]{ 10, 0, 18,MAX_VALUE,MAX_VALUE,MAX_VALUE, 16,MAX_VALUE, 12};this.map[2] = new int[]{MAX_VALUE,MAX_VALUE, 0, 22,MAX_VALUE,MAX_VALUE,MAX_VALUE,MAX_VALUE, 8};this.map[3] = new int[]{MAX_VALUE,MAX_VALUE, 22, 0, 20,MAX_VALUE,MAX_VALUE, 16, 21};this.map[4] = new int[]{MAX_VALUE,MAX_VALUE,MAX_VALUE, 20, 0, 26,MAX_VALUE, 7,MAX_VALUE};this.map[5] = new int[]{ 11,MAX_VALUE,MAX_VALUE,MAX_VALUE, 26, 0, 17,MAX_VALUE,MAX_VALUE};this.map[6] = new int[]{MAX_VALUE, 16,MAX_VALUE,MAX_VALUE,MAX_VALUE, 17, 0, 19,MAX_VALUE};this.map[7] = new int[]{MAX_VALUE,MAX_VALUE,MAX_VALUE, 16, 7,MAX_VALUE, 19, 0,MAX_VALUE};this.map[8] = new int[]{MAX_VALUE, 12, 8, 21,MAX_VALUE,MAX_VALUE,MAX_VALUE,MAX_VALUE, 0};}//初始化参数public void init(){//1 初始化地图this.initMap();//2 初始化lowCost和adjvexfor(int i = 0 ; i < this.lowCost.length ;i++){this.lowCost[i] = 0;this.adjvex[i] = 0;}}// 普里姆算法核心public void prim(){// 1 取 v0 顶点,并为lowCost赋值for(int i = 0 ; i < this.lowCost.length ;i++){this.lowCost[i] = this.map[0][i];}for(int j = 1 ; j < this.lowCost.length ;j++){// 2 从lowcost中计算得到最小权值int min = MAX_VALUE;int position = -1; //记录最小权值的位置for(int i = 0 ; i < this.lowCost.length ;i++){if( this.lowCost[i]!=0 && min > this.lowCost[i] ){min = this.lowCost[i];position = i;}}// 3 得到最小值,并输出this.counter++;System.out.println("第 "+this.counter+" 条边为 : ["+this.nodes[this.adjvex[position]]+","+this.nodes[position]+"] = "+this.lowCost[position]+" ");totalCounter = totalCounter + this.lowCost[position];this.stringBuffer.append(this.lowCost[position]+"+");// 4 调整adjvex和lowCost的值this.lowCost[position] = 0;this.adjvex[position] = 0;for(int i = 0 ; i < this.lowCost.length ;i++){if(this.map[position][i]!=0 && this.map[position][i]!=this.MAX_VALUE && this.lowCost[i]!=0 && this.lowCost[i] > this.map[position][i] ){this.lowCost[i] = this.map[position][i];this.adjvex[i] = position;}}}String result = this.stringBuffer.toString();result = result.substring(0,result.length()-1);System.out.println("总权值为 : " + result + " = " + this.totalCounter );}public static void main(String[] args) {PrimMiniCostSpanningTree primMiniCostSpanningTree = new PrimMiniCostSpanningTree();primMiniCostSpanningTree.prim();}}
三 运行结果图
最小生成树之prim算法相关推荐
- C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...
- #1097 : 最小生成树一·Prim算法
#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...
- 数据结构笔记(二十九)--最小生成树(prim算法思想)
最小生成树(prim算法思想) 一.预知概念 直达:两顶点直接相连接 路径:两顶点之间可以有其他顶点,但最终两顶点是能够连接的 假如我们有四台电脑,怎样连接才能保证这四台电脑两两相互通信组成局域网呢? ...
- 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)
实验一 油管铺设 2018.11.06于CSDN释放 详见GitHub: https://github.com/DolorHunter/PrimAlgorithm 实验准备 最小生成树问题,求最小生成 ...
- 最小生成树的prim算法(java)
/** * 最小生成树的prim算法 * @author liuy */ public class Prim { public static void prim(int num, float[][] ...
- 最小生成树(Prim算法,Kruskal算法)
最小生成树 假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路.这时,自然各 考虑这样一个问题,如何在最节省经费的前提下建立这个通信网. 在每两个城市之间都可设置一条线路,相应地都要 ...
- 最小生成树之 Prim算法 Kruskal算法
1 描述 问题:修建一个连接各个小区与煤气供应站点之间的管道,使得造价成本最低,即构造一颗最小生成树.但是如何求解? 对应模型:树结构,生成树,最小生成树 2 prim算法实例 基本思想:在满足如下条 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- 图的最小生成树(Prim算法)
最小生成树 定义:生成树中边的权值(代价)之和最小的树 Prim Prim算法:普里姆算法,图论中的一种算法,可在加权连通图里搜索最小生成树. Ps:该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克( ...
最新文章
- javascript --- 利用节点关系访问HTML元素
- springmvc 源码分析
- 超60亿元,新华三领衔华为锐捷中兴中标中国移动高端路由器和交换机集采
- a href=# 与 a href=javascript:void(0) 的区别
- 从iPhone SE到产品精神——一个科技记者的自述
- PaddleOCR服务器端部署C++ cpu或者gpu进行预测
- python 中的metaclass和baseclasses
- java swing 按键_Java Swing 快捷键
- python3实例车代码_Python编程pygame模块实现移动的小车示例代码
- C# 很基础的那些东西
- 《Applying Deep Learning to Answer Selection: A Study And an Open Task》文章理解小结
- java视频教程下载
- 使用Java复制文件并在控制台显示文件进度
- OpenLayers 加载 百度 地图
- magicbook2018+MX150+win10+显卡驱动445.87+cuda_10.0.130+cudnn_v7.6.4.38+conda4.8.3+tensorflow1.14.0
- oracle重做日志详解,oracle数据文件、控制文件、重做日志文件详解
- 刷题日记-SQL 查找最晚入职员工的所有信息
- 路由器老掉线的原因之一
- FACEGOOD-Audio2Face(个人学习)
- 电脑进不去游戏显示重新连接服务器,幻塔无法连接服务器怎么办?游戏进不去解决方法...