引子:

克鲁斯卡尔算法的作用是:构建图的最小生成树。

克鲁斯卡尔算法 Kruskal的构造过程:

1、初始化图:n个顶点,n个连通分量(如果两个顶点的连通分量相同,表示两点在同一个连通图中)。把所有的边(包含这个边两端的两个顶点)放入优先级队列中,按照权重从小到大。

2、选择最小权重的边,如果这个边的头顶点的和尾顶点的连通分量不同,则合并头和尾两个分量(整个连通图的点都需要修改,具体看代码)。舍弃该边。(连通分量用整数表示)

3、重复第二步,直到所有的顶点都连接着同一个连通分量里面。

package minTree;import java.util.Comparator;
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.Queue;public class MinTree_KruskalTest {public static void main(String[] args) {MinTree_Kruskal m = new MinTree_Kruskal();m.addEdge(0, 1, 6);m.addEdge(0, 2, 1);m.addEdge(0, 3, 5);m.addEdge(0, 4, 10000);m.addEdge(1, 2, 5);m.addEdge(1, 3, 10000);m.addEdge(1, 4, 3);m.addEdge(1, 5, 10000);m.addEdge(2, 3, 5);m.addEdge(2, 4, 6);m.addEdge(2, 5, 4);m.addEdge(3, 4, 10000);m.addEdge(3, 5, 2);m.addEdge(4, 5, 6);m.doKruskal();}
}class MinTree_Kruskal{private Queue<Edge> edges = null;public MinTree_Kruskal(){this.edges = new PriorityQueue<>(new MyComparator());}public void addEdge(int head, int tail, int weigth){this.edges.add(new Edge(head, tail, weigth));}public void doKruskal(){//优先级队列,按照权重从小到大排列Queue<Edge> tempQueue = new PriorityQueue<>(new MyComparator());Iterator<Edge> iter = edges.iterator();//复制队列while(iter.hasNext()){tempQueue.add(iter.next());}int len = tempQueue.size();//表示各顶点自成一个连通分量int[] vexSet = new int[len];for(int i = 0; i < len; i++){vexSet[i] = i;}for(int i = 0; i < len; i++){Edge e1 = null;//队列中权重最小的边e1 = tempQueue.poll(); if(e1 != null){if(vexSet[e1.head] != vexSet[e1.tail]){System.out.println(e1.head+" --> "+e1.tail+"; weigth = "+e1.weigth);int t = vexSet[e1.tail];int h = vexSet[e1.head];//合并头和尾的连通分量for(int j = 0; j < len; j++){if(vexSet[j] == t){vexSet[j] = h;}}}}}}class Edge{//头顶点int head;//尾顶点int tail;//两点的权重int weigth;public Edge(int head, int tail, int weigth){this.head = head;this.tail = tail;this.weigth = weigth;}}/*** 自定义比较器* @author LiangYH**/class MyComparator implements Comparator<Edge>{@Overridepublic int compare(Edge o1, Edge o2) {return o1.weigth - o2.weigth;}}
}

无向图的最小生成树(克鲁斯卡尔算法 Kruskal)相关推荐

  1. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  2. Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)

    1.Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal) 普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)求**最小生成树(极小连通子图)**的算法 1.1普利姆算法(Prim) ...

  3. 数据结构图之二(最小生成树--克鲁斯卡尔算法)

    [1]克鲁斯卡尔算法 普里姆算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 克鲁斯卡尔算法是直接以边为目标去构建. 因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想 ...

  4. 最小生成树克鲁斯卡尔算法

    文章目录 一.什么是克鲁斯卡尔? 二.原理 三.代码实现 一.什么是克鲁斯卡尔? 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法.与普里姆算法不同,它的时间复杂度为O(eloge)(e为网中的边数) ...

  5. 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)

    最小生成树算法 prime算法和克鲁斯卡尔算法 克鲁斯卡尔算法 思路 优先队列+并查集 Kuskal算法 [算法简介]:上一篇中的Prime算法是一种"加点式的算法",而Kuska ...

  6. 五、最小生成树——克鲁斯卡尔(Kruskal)算法

    现在我们来换一种思考方式,普里姆(Prim)算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的.这就像是我们如果去参观某个展会,例如世博会,你从一个入口进去,然后找你所在位置周边的场馆 ...

  7. prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树

    上一节介绍了求最小生成树之普里姆算法.该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网.本节所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(e ...

  8. 最小生成树(克鲁斯卡尔算法)

    关于克鲁斯卡尔算法他是针对边的.而普里姆算法是针对顶点的. 下面还是用普里姆算法的图. 如下: 因此可以构造边集数组. 如下图所示: 代码如下: int Find(int *parent, int f ...

  9. 最小生成树------克鲁斯卡尔算法(数据结构)

    树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树. 生成树是连通图 ...

最新文章

  1. ​防火墙(一)主机型防火墙
  2. java5引入包装类型的意义_Java中的基本类型和包装类
  3. css3 卡片亮光_利用css3实现文字亮光特效的代码
  4. 胡渊鸣的「太极图形」又融了5000万美元,接下来推出3D内容创作平台
  5. SQL查询入门(上篇)
  6. js中setTimeout的用法和JS计时器setTimeout与setInterval方法的区别和confirm方法
  7. Linux Capabilities 入门教程--基础实战篇
  8. LAMP构架概述及相关服务的搭建(附带搭建论坛实验)
  9. Facebook的bigpipe
  10. php电商网站开发流程图,php网上购物平台设计+ER图+流程图.doc
  11. java二进制命令_Java二进制指令代码解析
  12. 吕氏春秋 —— 不韦迁蜀 世传吕览
  13. one hot encoding
  14. C语言之输出孪生素数
  15. B站高清视频下载方法揭密
  16. 后端返回base64格式数据转excel格式文件并下载
  17. android 图片浏览 app 排行版,安卓图片浏览软件哪个好_安卓图片浏览app推荐_图片浏览app软件排行...
  18. 86.3 安全性问题 xss、DDOS、CC、sql注入 攻击等
  19. 扑克与投资哲学,活着最重要
  20. 西欧5800计算器坐标正反算程序

热门文章

  1. php e框架是啥,几款主流PHP框架的优缺点评比
  2. 记一次数组工具类 交集,去重
  3. 互联网学院大数据开发专业欢迎加入
  4. javascript中console的用法
  5. 全球40起黑客攻击或与CIA有关 长角牛黑客组织打卡“上班”
  6. PHP扩展 Mongo 与 MongoDB
  7. 近期笔试小结(附数据库工程师面试准备)
  8. WebService相关
  9. 浅谈超文本传输协议(HTTP)
  10. javascript加载顺序问题(二)