kruskal java_kruskal算法 源码(java)
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.Set;
/**
*
* kruskal算法 适用范围:要求无向图
*
*/
//undirected graph only
public class Code_04_Kruskal {
// Union-Find Set
public static class UnionFind {
private HashMap fatherMap;
private HashMap rankMap;
public UnionFind() {
fatherMap = new HashMap();
rankMap = new HashMap();
}
private Node findFather(Node n) {
Node father = fatherMap.get(n);
if (father != n) {
father = findFather(father);
}
fatherMap.put(n, father);
return father;
}
public void makeSets(Collection nodes) {
fatherMap.clear();
rankMap.clear();
for (Node node : nodes) {
fatherMap.put(node, node);
rankMap.put(node, 1);
}
}
public boolean isSameSet(Node a, Node b) {
return findFather(a) == findFather(b);
}
public void union(Node a, Node b) {
if (a == null || b == null) {
return;
}
Node aFather = findFather(a);
Node bFather = findFather(b);
if (aFather != bFather) {
int aFrank = rankMap.get(aFather);
int bFrank = rankMap.get(bFather);
if (aFrank <= bFrank) {
fatherMap.put(aFather, bFather);
rankMap.put(bFather, aFrank + bFrank);
} else {
fatherMap.put(bFather, aFather);
rankMap.put(aFather, aFrank + bFrank);
}
}
}
}
public static class EdgeComparator implements Comparator {
@Override
public int compare(Edge o1, Edge o2) {
return o1.weight - o2.weight;
}
}
public static Set kruskalMST(Graph graph) {
UnionFind unionFind = new UnionFind();//生成一个并查集
unionFind.makeSets(graph.nodes.values());
//生成一个优先级队列(堆)
PriorityQueue priorityQueue = new PriorityQueue<>(new EdgeComparator());
for (Edge edge : graph.edges) {
priorityQueue.add(edge);
}
Set result = new HashSet<>();
while (!priorityQueue.isEmpty()) {
Edge edge = priorityQueue.poll();
if (!unionFind.isSameSet(edge.from, edge.to)) {
result.add(edge);
unionFind.union(edge.from, edge.to);
}
}
return result;
}
}
kruskal java_kruskal算法 源码(java)相关推荐
- kruskal java_Kruskal算法(三)之 Java详解
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...
- Java自动计算迷宫正确路线算法源码
简介: Java自动计算迷宫正确路线算法源码,首先迷宫需要满足存在开始标识和结束标识与墙标识,然后设置好行数与列数就可以开始计算正确路线了,采用的是为二维数组然后走遍所有路线的方式. 网盘下载地址: ...
- Learning to Rank中Pointwise关于PRank算法源码实现
[学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...
- 基于新唐M0的XXTEA加密解密算法源码
源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...
- [转] GIS算法源码集合
其他GIS相关代码下载索引 http://www.mygis.com.cn/codeindex10.htm 1.深度优先实现的路径分析源码 http://www.mygis.com.cn/codes/ ...
- 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择
前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...
- 超像素SLIC算法源码阅读
超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...
- Java开心农场源码Java欢乐农场源码
Java开心农场源码Java欢乐农场源码 public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null); ...
- [附源码]JAVA毕业设计景区门票系统(系统+LW)
[附源码]JAVA毕业设计景区门票系统(系统+LW) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...
- [附源码]JAVA毕业设计书香校园阅读平台(系统+LW)
[附源码]JAVA毕业设计书香校园阅读平台(系统+LW) 项目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...
最新文章
- WebAPI接口安全校验
- c++ 把数字和中文字符分开_C语言中的字符常量与变量
- PHP date, strtotime, mktime处理
- 关于fmincon和cvx
- Qt Creator列表和其他数据模型
- CGPA的完整形式是什么?
- Java笔记-Java中桥接模式
- C#学习常用方法(3000)---Foreach ,in
- linux从Mac下载文件,如何将命令的输出保存到Bash中的文件(也称为Linux和macOS终端) | MOS86...
- 品质背景壁纸网站高图网,选图不用瞎找了!
- karma如何与测试框架合作2之webpack
- 【免费】Discuz素材资源交易论坛整站源码/带数据整站源码打包
- 基于java实现PDF转图片图片合成PDF
- 中国朝代历史,名字的简介
- VNC访问阿里云服务器
- 微生物组-扩增子16S分析和可视化(线上/线下,本周开课,2021.7)
- DW1000 datasheet FUNCTIONAL DESCRIPTION
- 微信气泡主题设置_华为手机微信怎么设置气泡? 怎样改微信的气泡和主题
- MySQL设置允许指定IP远程连接
- webpack文件压缩