java kruskal怎么实现最小生成树
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要讲解了"java kruskal怎么实现最小生成树",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java kruskal怎么实现最小生成树
千家信息网最后更新 2024年11月11日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 ArrayListlines; //图存储,边集存储 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安全错误
数据库的锁怎样保障安全
数据库一对多关系中主键是谁
新游网络安全海报
南阳金钻网络技术
软件开发业务传销性
数据库教师课程表设计
互联网科技专业是干什么的
江津软件开发价格
生物信息数据库培训班
校园网络安全的作用
校园网络安全主持词
寄递业四大数据库指什么数据库
车协网络技术有限公司
网络安全攻击调研
思科网络安全问题
vsc如何写数据库编程
网络安全大会总结
美国新闻数据库
sql数据库不指定端口号
北京乐友集团软件开发招聘
网络安全技术总监年薪
楚留香手游服务器异常
vb怎么连接opc服务器
全球网络安全问题趋势
excel如何读sql数据库
中国最大的服务器cpu
实验七 数据库安全性
产品数据库管理系统源代码
服务器能直接连接互联网吗
中国杜家军网络安全即是
苏州阿里云服务器默认端口