java kruskal怎么实现最小生成树
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"java kruskal怎么实现最小生成树",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java kruskal怎么实现最小生成树
千家信息网最后更新 2025年12月02日java kruskal怎么实现最小生成树
这篇文章主要讲解了"java kruskal怎么实现最小生成树",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java kruskal怎么实现最小生成树"吧!
话不多说了,看代码:
import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;/**P1861 Network D题 - 最小生成树: kruskal4 61 2 11 3 11 4 22 3 13 4 12 4 1141 21 32 33 4 * @author 姚林涛 * */public class Main { static int N,M; static int[] SET; //并查集数组 static ArrayList lines; //图存储,边集存储 static boolean[] visited; //访问标记 static int maxLine ;//最大距离 public static void main(String[] args) { Scanner sc = new Scanner(System.in); //接收参数 N = sc.nextInt(); M = sc.nextInt(); maxLine = 0; SET = new int[N+1]; visited = new boolean[M]; lines = new ArrayList(); for (int i = 0; i < M; i++) { int s = sc.nextInt(); int e = sc.nextInt(); int v = sc.nextInt(); new Line(s,e,v); lines.add(new Line(s,e,v)); } //排序 Collections.sort(lines); //查并集 init(); for (int i = 0; i < lines.size(); i++) { if(!isConntect(lines.get(i).s,lines.get(i).e)) { union(lines.get(i).s,lines.get(i).e); maxLine = lines.get(i).v; // 最后一次肯定是最大长度 visited[i] = true; } } //计算个数 int count = N-1; System.out.println(maxLine); System.out.println(count); for (int i = 0; i < lines.size(); i++) { if(visited[i]) { System.out.println(lines.get(i).s+" "+lines.get(i).e); } } sc.close(); } /** * 将 b的根节点,指向a的根节点 * @param a * @param b */ private static void union(int a, int b) { int tempA = SET[a]; int tempB = SET[b]; if(tempA!=tempB) { SET[tempB] = tempA; } } /** * a,b 是否连接 * @param a * @param b * @return */ private static boolean isConntect(int a, int b) { return find(a)==find(b); } /** * 返回 a 的根节点 * @param b * @return */ private static int find(int a) { if(SET[a] == a) { return a; }else { SET[a] = find(SET[a]); return SET[a]; } } /** * 并查集 初始化 */ private static void init() { for (int i = 1; i < SET.length; i++) { SET[i] = i; } } static class Line implements Comparable{ public int s; public int e; public int v; public Line(int s, int e, int v) { this.s = s; this.e = e; this.v = v; } @Override public int compareTo(Line o) { if(this.v != o.v) { return this.v - o.v; }else { return this.s - o.s; } } }} 感谢各位的阅读,以上就是"java kruskal怎么实现最小生成树"的内容了,经过本文的学习后,相信大家对java kruskal怎么实现最小生成树这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
最小
生成
节点
学习
最大
内容
存储
个数
代码
参数
就是
思路
情况
指向
数组
文章
更多
林涛
标记
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
思维导图的软件开发
web查数据库响应慢
数据库表单数据大于0
大专学网络技术出来找什么工作
和平区实惠的软件开发报价
党校网络安全工作责任制实施细则
数据库查询日志中报错的部分
网络安全攻防演练脚本
数据库中的数据具有高度的
专利数据库采购事由
辽宁网络安全保障工作联盟
学校查重数据库是最新的吗
dms服务器未响应怎么解决
上海参考软件开发定制收费
滁州安卓软件开发外包
软件开发人员经验
3d电影服务器
数据库5nf
3173 软件开发工具
分布式非结构数据库子系统
通信网络技术视频
汉寿服务器
软件开发人月参考标准
重返帝国服务器多久开一服
网络安全工程师可以在哪就业
社科成果数据库
学生会的网络技术部笔试
广州交友软件开发费用
服务器excel有什么用
网络安全个人看法小学生