最小生成树Prim算法Java版
最小生成树Prim算法Java版
算法描述:
- 在一个加权连通图中,顶点集合V,边集合为E
- 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.
- 重复以下操作,直到所有点都被标记为visit:
在剩下的点钟,计算与已标记visit点距离最小的点,标记visit,证明加入了最小生成树。
对比克鲁斯卡尔算法
假设网中有n个节点和e条边,普利姆算法的时间复杂度是O(n^2),克鲁斯卡尔算法的时间复杂度是O(eloge),可以看出前者与网中的边数无关,而后者相反。因此,普利姆算法适用于边稠密的网络而克鲁斯卡尔算法适用于求解边稀疏的网。
克鲁斯卡尔算法的时间复杂度主要由排序方法决定,而克鲁斯卡尔算法的排序方法只与网中边的条数有关,而与网中顶点的个数无关,当使用时间复杂度为O(elog2e)的排序方法时,克鲁斯卡尔算法的时间复杂度即为O(log2e),因此当网的顶点个数较多、而边的条数较少时,使用克鲁斯卡尔算法构造最小生成树效果较好
Code
package com.company;
import java.util.*;public class MinTree {public static void main(String[] args) {int[][] arr = new int[][]{// 0 1 2 3 4 5 6 7 8{-0, 4, 0, 0, 0, 0, 0, 7, 0},{4, -0, 8, 0, 0, 0, 0, 11, 0},{0, 8, -0, 7, 0, 4, 0, 0, 2},{0, 0, 7, -0, 9, 14, 0, 0, 0},{0, 0, 0, 9, -0, 10, 0, 0, 0},{0, 0, 4, 14, 10, -0, 2, 0, 0},{0, 0, 0, 0, 0, 2, -0, 1, 6},{7, 11, 0, 0, 0, 0, 1, -0, 7},{0, 0, 2, 0, 0, 0, 6, 7,-0}};boolean[] visited=new boolean[arr.length];visited[0]=true;PriorityQueue<Integer[]> queue=new PriorityQueue<>(new Comparator<Integer[]>() {@Overridepublic int compare(Integer[] o1, Integer[] o2) {return o1[0]-o2[0];}});int count=1;for (int i = 0; i < arr.length; i++) {if(arr[0][i]!=0&&!visited[i]){queue.add(new Integer[]{arr[0][i],0,i});}}while (count<arr.length){Integer[] temp=null;while (!queue.isEmpty()){temp=queue.poll();if(visited[temp[2]])continue;break;}visited[temp[2]]=true;System.out.println("起点:"+temp[1]+" 终点:"+temp[2]+" 长度为:"+temp[0]);for (int i = 0; i < arr.length; i++) {if(arr[temp[2]][i]!=0&&!visited[i]){queue.add(new Integer[]{arr[temp[2]][i],temp[2],i});}}count++;}}
}
输出
起点:0 终点:1 长度为:4
起点:0 终点:7 长度为:7
起点:7 终点:6 长度为:1
起点:6 终点:5 长度为:2
起点:5 终点:2 长度为:4
起点:2 终点:8 长度为:2
起点:2 终点:3 长度为:7
起点:3 终点:4 长度为:9
Process finished with exit code 0
最小生成树Prim算法Java版相关推荐
- 最小生成树Prim算法java实现
package prim;import java.util.*;public class PrimTest {public static void main(String[] args) {//交互输 ...
- [Java学习] 最小生成树——Prim算法
文章目录 最小生成树 Prim算法流程 应用实例 求最小生成树 最小生成树 百度百科上对于最小生成树的定义是这样的:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结 ...
- 最小生成树-Prim算法详解(含全部代码)
目录 适用条件 测试所用图 算法详解 Prim算法代码 全部代码 实验结果 适用条件 加权连通图 测试所用图 所用原图及生成过程 其中,(a) 为原图,圆圈里面是节点的名称,边上的数字是边的权值.由实 ...
- java 随机金额_java_微信随机生成红包金额算法java版,最近几年玩得最疯狂的应该是 - phpStudy...
微信随机生成红包金额算法java版 最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public cl ...
- Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题
接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题 HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...
- D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135
理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...
- 西南科技大学OJ题 求最小生成树(Prim算法)1075
求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...
- 最小生成树 - Prim算法
最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...
- 最小生成树--Prim算法
目录 适用场景: 问题描述 Prim算法的实现原理: 实现代码C++: 适用场景: 朴素版的Prim算法主要是应用于最小生成树问题中稠密图的情形,解决求连通图中将所有边连通起来时需要的最短距离问题,具 ...
最新文章
- Web_SQL注入(1)
- Git初始化配置以及配置github
- 你知道group by的工作原理和优化思路吗?
- Duilib初级控件扩展一例: 具有鼠标滚动消息的OptionUI
- 设计模式--策略模式(C++实现)
- 算法笔记_什么是算法/算法分析/减而知之/分而治之/动态规划
- C#EasyHook例子C# Hook 指定进程C#注入指定进程 z
- OpenPoseDemo的用法
- UmiJs整合Egg
- CheckException和UnCheckException的区别
- 必备配色攻略-绿色篇
- 【MOOC手写体】王文敏教授.《人工智能原理》 第10章 机器学习的任务 Part5 C10.1...
- 云端体验鸿蒙,AI加持的另类彩电之华为智慧屏带你体验鸿蒙
- 常用的Git代码托管平台
- 归一化函数normalize
- mysql longtext_MySql中LongText类型大字段查询优化
- 关于树莓派编译及运行Snowboy的详细教程。
- Photoshop切图简单设置+工具介绍+以及切图方法
- java中的package关键字
- POJ 3842 An Industrial Spy 快筛质数+STL乱搞
热门文章
- 泛微Ecology9单点登录说明
- spoolsv出错,无法使用打印服务的解决办法
- Python Qt5 入门教程
- Bing翻译实例(microsoft translator API)
- ip camera如何将流媒体信息传送到流媒体服务器,IP Camera远程监控系统的设计与实现...
- One-Stage Visual Grounding via Semantic-Aware Feature Filter
- 计算机出现蓝屏怎么解决,电脑出现蓝屏,什么原因,怎么办?
- RemoteViews完全解析
- linux点餐系统,基于Linux的智能点餐系统
- R语言ggplot2可视化:使用geom_step可视化阶梯图、阶梯线图、可视化分组阶梯线图