package prim;import java.util.*;public class PrimTest {public static void main(String[] args) {//交互输入图的邻接矩阵表示,为方便测试,直接给定了邻接矩阵值
//      System.out.println("请输入图定点个数: ");
//      Scanner sc = new Scanner(System.in);
//      String line = sc.nextLine();
//      int n = Integer.parseInt(line);
//      System.out.println("请输入图的路径长度: ");
//      int[][] c = new int[n+1][n+1];
//      for(int i = 0; i < n; i++) {//          line = sc.nextLine();
//          String[] ds = line.split(",");
//          for(int j = 0;j < ds.length; j++) {//              c[i+1][i+1] = Integer.parseInt(ds[j]);
//
//          }
//      }
//      System.out.println("一次构成树的边为: ");int n = 6;//c[i][j]表示从i到j的权,自己到自己的权,以及不能直接到的值置-1,方便后面处理int[][] c = {{0,0,0,0,0,0},{0,-1,6,1,5,-1,-1},{0,6,-1,5,-1,3,-1},{0,1,5,-1,5,6,4},{0,5,-1,5,-1,-1,2},{0,-1,3,6,-1,-1,6},{0,-1,-1,4,2,6,-1}};prim(n,c);}public static void prim(int n, int[][] c) {//lowcost[i] 表示 从1到i的最短权值int[] lowcost = new int[n+1];//closest[i]的表示:将整个节点空间定为V,已选的空间从S=1(只有第一个点)开始,j在V-S中,找到S里离j最近的节点i ,就记录在closest[j]。int[] closest = new int[n+1];//哪些节点已经进入S空间boolean[] s = new boolean[n+1];//节点1进入S中,此为初始化s[1] = true;//初始化for(int i = 2; i <= n; i++) {//初始化第一个节点到每个节点权值lowcost[i] = c[1][i];//初始化,因为S中只有1,所以每个V-S中的节点最近的S中的节点一定是1closest[i] = 1;//这些节点都初始化为不在S中的状态s[i] = false;}//n-1次遍历,把S空间扩充成Vfor(int i = 1;i < n; i++) {//记录一个当前最小权值,不断比较最终变为整个1次遍历过程的最小权值int min = Integer.MAX_VALUE;//初始化j,j其实代表的是V-S空间中被选进S的节点//它的特征是,它到S(任何节点)的权值比其他节点到S(同样随便哪个节点)都小//这里的思想就是贪心的概念,通过局部最优可以得到全局最优int j = 1;//遍历除了直接初始化在S中的1节点外的其他所有节点for(int k = 2; k <= n; k++) {//不等于-1即,直接有权值,然后迭代出最小的lowcost,同时更新一些值。//这里举例更容易说明,如lowcost[k]其实代表的是目前的S空间到k的最小权值,迭代找到了这个k,那么 显然 j就应该是kif(lowcost[k] != -1 && lowcost[k] < min && !s[k]) {min = lowcost[k];j = k;}}//输出这对连接,closest[j]记录的其实就是达成lowcost[k]这一最小权值时,S中具体是哪个节点System.out.println(closest[j] + "-" + j);//如此,把j纳入S空间s[j] = true;//j进入S空间后,更新除1节点外所有节点的状态,他们到S的最小权值还得看看他们到 新进入的j是否更小for(int k = 2; k <= n; k++) {if(!s[k] && c[j][k] != -1) {//这里注意,如果lowcost[k]本来是-1说明本来都不相连直接可以更新了//这里的逻辑要搞清楚,先判断有必要更新么?(c[j][k]!= -1),然后判断 要么c[j][k]比之前的权值更小,要么原来都不相连(c[j][k] < lowcost[k] || lowcost[k] == -1) 此时进行更新!if(c[j][k] < lowcost[k] || lowcost[k] == -1) {//更新该节点最小的权值lowcost[k] = c[j][k];//更新该节点在S中最近的点closest[k] = j;}}}}}
}

最小生成树Prim算法java实现相关推荐

  1. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  2. [Java学习] 最小生成树——Prim算法

    文章目录 最小生成树 Prim算法流程 应用实例 求最小生成树 最小生成树 百度百科上对于最小生成树的定义是这样的:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结 ...

  3. D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...

  4. 西南科技大学OJ题 求最小生成树(Prim算法)1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...

  5. 最小生成树-Prim算法详解(含全部代码)

    目录 适用条件 测试所用图 算法详解 Prim算法代码 全部代码 实验结果 适用条件 加权连通图 测试所用图 所用原图及生成过程 其中,(a) 为原图,圆圈里面是节点的名称,边上的数字是边的权值.由实 ...

  6. 最小生成树 - Prim算法

    最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...

  7. HDU 1863畅通工程(最小生成树)(prim算法)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  9. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

最新文章

  1. request中的内容存储_宜信开源|调用链系列(3):解读UAVStack中的调用链技术...
  2. 已知三角形三边长怎么求面积_解三角形问题中的常见错解分析
  3. selenium java 断言_Java+Selenium+Testng自动化测试学习(三)— 断言
  4. C++map容器应用举例
  5. python中元组和列表转化_4.Python列表/元组/集合/字典
  6. 常用机器学习算法汇总(中)
  7. sqlmap 注入方式、使用总结
  8. bzoj2150,poj1422,poj1548
  9. Atitit.atiInputMethod v2词库清理策略工具    q229
  10. 站长之家bbs.chinaz.com宣布将于2018年7月15日永久关站
  11. (转)金融从业者将被人工智能取代?
  12. php正弦函数图像,Go语言输出正弦函数(Sin)图像
  13. 织梦 - PHP开源网站管理系统
  14. 数据哪里找?200个源数据网站全给你!
  15. 外贸7日通-外贸流程详解 第六天
  16. Pr 入门教程之如何创建新序列?
  17. filco蓝牙不好用_蓝牙党+精简布局键位的选择:Filco Minila Air青轴两个月使用体验...
  18. 具有锂电池正负极反接保护的1A线性充电芯片SM5202兼容4056
  19. Power Method for dominate eigenvalue
  20. mac磁盘工具中磁盘显示灰色

热门文章

  1. no matching distribution found for XXX 或 read timed out解决办法
  2. 流媒体之Jitterbuffer笔记
  3. html2canvas生成长图片时导致背景图渲染不全问题
  4. Unity 背景图片自适应Text长度
  5. MyOwnFreeHost免费分销空间定制模板管理用户WHMCS整合和空间运营
  6. BeautifulSoup与lxml
  7. HTTP/2协议详细介绍
  8. mysql cast()与convert() 函数
  9. 统计学习方法李航版第十章部分课后习题python答案
  10. php yii2.0框架下载,yii2.0下载|yii2.0(php框架) v2.0.10官方版 附安装教程 - 121下载站...