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)相关推荐

  1. kruskal java_Kruskal算法(三)之 Java详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

  2. Java自动计算迷宫正确路线算法源码

    简介: Java自动计算迷宫正确路线算法源码,首先迷宫需要满足存在开始标识和结束标识与墙标识,然后设置好行数与列数就可以开始计算正确路线了,采用的是为二维数组然后走遍所有路线的方式. 网盘下载地址: ...

  3. Learning to Rank中Pointwise关于PRank算法源码实现

    [学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...

  4. 基于新唐M0的XXTEA加密解密算法源码

    源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...

  5. [转] GIS算法源码集合

    其他GIS相关代码下载索引 http://www.mygis.com.cn/codeindex10.htm 1.深度优先实现的路径分析源码 http://www.mygis.com.cn/codes/ ...

  6. 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择

    前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...

  7. 超像素SLIC算法源码阅读

    超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...

  8. Java开心农场源码Java欢乐农场源码

    Java开心农场源码Java欢乐农场源码 public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null); ...

  9. [附源码]JAVA毕业设计景区门票系统(系统+LW)

    [附源码]JAVA毕业设计景区门票系统(系统+LW) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  10. [附源码]JAVA毕业设计书香校园阅读平台(系统+LW)

    [附源码]JAVA毕业设计书香校园阅读平台(系统+LW) 项目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

最新文章

  1. WebAPI接口安全校验
  2. c++ 把数字和中文字符分开_C语言中的字符常量与变量
  3. PHP date, strtotime, mktime处理
  4. 关于fmincon和cvx
  5. Qt Creator列表和其他数据模型
  6. CGPA的完整形式是什么?
  7. Java笔记-Java中桥接模式
  8. C#学习常用方法(3000)---Foreach ,in
  9. linux从Mac下载文件,如何将命令的输出保存到Bash中的文件(也称为Linux和macOS终端) | MOS86...
  10. 品质背景壁纸网站高图网,选图不用瞎找了!
  11. karma如何与测试框架合作2之webpack
  12. 【免费】Discuz素材资源交易论坛整站源码/带数据整站源码打包
  13. 基于java实现PDF转图片图片合成PDF
  14. 中国朝代历史,名字的简介
  15. VNC访问阿里云服务器
  16. 微生物组-扩增子16S分析和可视化(线上/线下,本周开课,2021.7)
  17. DW1000 datasheet FUNCTIONAL DESCRIPTION
  18. 微信气泡主题设置_华为手机微信怎么设置气泡? 怎样改微信的气泡和主题
  19. MySQL设置允许指定IP远程连接
  20. webpack文件压缩

热门文章

  1. 解决iTnues对PC授权,连接不上iTnues的问题
  2. oracle学习的一些网站收藏
  3. asp.net未知的服务器标记错误
  4. 3.深入分布式缓存:从原理到实践 --- 动手写缓存
  5. 9.运输层(3)---TCP
  6. 7. JavaScript RegExp 对象
  7. 机器学习之保存与加载.pickle模型文件
  8. ant jmeter 优化报告
  9. Spring pom配置详解(转)
  10. Xcode中AutoLayOut的简单使用