一 背景

二  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算法相关推荐

  1. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  2. #1097 : 最小生成树一·Prim算法

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  3. 数据结构笔记(二十九)--最小生成树(prim算法思想)

    最小生成树(prim算法思想) 一.预知概念 直达:两顶点直接相连接 路径:两顶点之间可以有其他顶点,但最终两顶点是能够连接的 假如我们有四台电脑,怎样连接才能保证这四台电脑两两相互通信组成局域网呢? ...

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

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

  5. 最小生成树的prim算法(java)

    /** * 最小生成树的prim算法 * @author liuy */ public class Prim { public static void prim(int num, float[][] ...

  6. 最小生成树(Prim算法,Kruskal算法)

    最小生成树 假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路.这时,自然各 考虑这样一个问题,如何在最节省经费的前提下建立这个通信网. 在每两个城市之间都可设置一条线路,相应地都要 ...

  7. 最小生成树之 Prim算法 Kruskal算法

    1 描述 问题:修建一个连接各个小区与煤气供应站点之间的管道,使得造价成本最低,即构造一颗最小生成树.但是如何求解? 对应模型:树结构,生成树,最小生成树 2 prim算法实例 基本思想:在满足如下条 ...

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

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

  9. 图的最小生成树(Prim算法)

    最小生成树 定义:生成树中边的权值(代价)之和最小的树 Prim Prim算法:普里姆算法,图论中的一种算法,可在加权连通图里搜索最小生成树. Ps:该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克( ...

最新文章

  1. javascript --- 利用节点关系访问HTML元素
  2. springmvc 源码分析
  3. 超60亿元,新华三领衔华为锐捷中兴中标中国移动高端路由器和交换机集采
  4. a href=# 与 a href=javascript:void(0) 的区别
  5. 从iPhone SE到产品精神——一个科技记者的自述
  6. PaddleOCR服务器端部署C++ cpu或者gpu进行预测
  7. python 中的metaclass和baseclasses
  8. java swing 按键_Java Swing 快捷键
  9. python3实例车代码_Python编程pygame模块实现移动的小车示例代码
  10. C# 很基础的那些东西
  11. 《Applying Deep Learning to Answer Selection: A Study And an Open Task》文章理解小结
  12. java视频教程下载
  13. 使用Java复制文件并在控制台显示文件进度
  14. OpenLayers 加载 百度 地图
  15. magicbook2018+MX150+win10+显卡驱动445.87+cuda_10.0.130+cudnn_v7.6.4.38+conda4.8.3+tensorflow1.14.0
  16. oracle重做日志详解,oracle数据文件、控制文件、重做日志文件详解
  17. 刷题日记-SQL 查找最晚入职员工的所有信息
  18. 路由器老掉线的原因之一
  19. FACEGOOD-Audio2Face(个人学习)
  20. 电脑进不去游戏显示重新连接服务器,幻塔无法连接服务器怎么办?游戏进不去解决方法...

热门文章

  1. 【Log4j日志输出】控制台输出、输出到文件:简单使用示例
  2. 非阻塞同步机制和CAS
  3. Libra教程之:move语言的特点和例子
  4. 记一次 @Transactional不生效的问题
  5. C++实现Base64编解码并应用于图片传输
  6. 汉密尔顿回路 (25 分)【思路讲解】
  7. 【解析】案例4-1.7 文件传输 (25 分)
  8. 12行代码AC——试题 算法训练 猴子吃包子——解题报告
  9. java中Robot
  10. 计算机组成原理第三章视频,计算机组成原理 第3章 3.4 十进制转换二进制