java kruskal怎么实现最小生成树
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"java kruskal怎么实现最小生成树",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java kruskal怎么实现最小生成树
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
山东特亿宝互联网科技有限公司
北京路客互联网科技有限公司
鸠鸠互联网科技
北京互联网科技
互联网的科技创新
中国 科技 互联网
深圳齐家互联网科技
广州优美互联网科技
中国科技互联网公司收入
福州新华互联网科技学校 知乎
银川新华互联网科技学校联系电话
威龙国际互联网科技公司
35岁以上互联网科技行业
神州科技互联网有限公司
广州梦谷互联网科技有限公司领导
昆明中奇联合互联网科技
数字科技和互联网金融哪个好
东风日产互联网科技公司叫什么
科技美学互联网 艺术
每日互联网科技新闻
新华互联网科技学院
麻工互联网科技
互联网金融与金融科技
互联网 视角下的科技创新
金融科技和互联网金融
成都仁贤领冠互联网科技有限公司
开启互联网科技时代小说
成都玖崟互联网科技有限公司乐商圈怎么样
链环科技传统企业怎么转型互联网
宁波允成互联网科技有限公司