设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,
没有边的非 连通图 T={V, E}, 图中每个顶点自成一个连通分量。
当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,
则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。
如此重复下去,直到所有顶点在同一个连通分量上为止。
import java.io.BufferedInputStream;
import java.util.*;
/*
* @author denghuilong
*
* 2013-8-7上午11:36:00
*
*/
public class Kruskal{
public static void main(String args[]){
ArrayList<P> ay=new ArrayList<P>();
P p0=new P(0, 1, 10);
P p1=new P(0, 5, 11);
P p2=new P(1, 8, 12);
P p3=new P(1, 2, 18);
P p4=new P(1, 6, 16);
P p5=new P(2, 8, 8);
P p6=new P(2, 3, 22);
P p7=new P(3, 4, 20);
P p8=new P(3, 7, 16);
P p9=new P(3, 6, 24);
P p10=new P(3, 8, 21);
P p11=new P(4, 7, 7);
P p12=new P(4, 5, 26);
P p13=new P(5, 6, 17);
P p14=new P(6, 7, 19);
ay.add(p0);
ay.add(p1);
ay.add(p2);
ay.add(p3);
ay.add(p4);
ay.add(p5);
ay.add(p6);
ay.add(p7);
ay.add(p8);
ay.add(p9);
ay.add(p10);
ay.add(p11);
ay.add(p12);
ay.add(p13);
ay.add(p14);
System.out.println("按权值排序");
Collections.sort(ay);
for(P pp:ay){
System.out.println(pp);
}
System.out.println("Kruskal(克鲁斯卡尔)");
int length=ay.size();
int patten[]=new int[length];//判断是否构成回路
for(int i=0;i<length;i++){
//查找定点尾部的下标
int n=find(patten,ay.get(i).start);
int m=find(patten,ay.get(i).end);
if(n!=m){
patten[n]=m;
System.out.println(ay.get(i));
}
}
}
public static int find(int patten[],int m){ return patten[m]>0?patten[m]:m;
}
}
class P implements Comparable<P>{
public int start;
public int end;
public int num;
public P(int start, int end, int num) {
this.start = start;
this.end = end;
this.num = num;
}
public int compareTo(P o) {
return this.num>o.num?1:-1;
}
public String toString(){
return "["+start+","+end+","+num+"]";
}
}

Kruskal(克鲁斯卡尔)的更多相关文章

  1. 最小生成树之Kruskal(克鲁斯卡尔)算法

    学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所 ...

  2. 经典问题----最小生成树(kruskal克鲁斯卡尔贪心算法)

    题目简述:假如有一个无向连通图,有n个顶点,有许多(带有权值即长度)边,让你用在其中选n-1条边把这n个顶点连起来,不漏掉任何一个点,然后这n-1条边的权值总和最小,就是最小生成树了,注意,不可绕成圈 ...

  3. HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  4. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)

    P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...

  5. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

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

    克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...

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

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

  8. c/c++ 用克鲁斯卡尔(kruskal)算法构造最小生成树

    c/c++ 用克鲁斯卡尔(kruskal)算法构造最小生成树 最小生成树(Minimum Cost Spanning Tree)的概念: 假设要在n个城市之间建立公路,则连通n个城市只需要n-1条线路 ...

  9. 最小生成树之克鲁斯卡尔(kruskal)算法

    #include <iostream> #include <string> using namespace std; typedef struct MGraph{ string ...

随机推荐

  1. Python金融应用编程(数据分析、定价与量化投资)

    近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...

  2. 华为OJ培训主题 比赛统计

    题目例如以下: 比赛情况统计 有一个游戏平台,各个參赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间仅仅举行一场比赛,比赛以得分的多少定胜负.须要完毕一个统计赛况的程序,可以随 ...

  3. linux运维常用命令集

    1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \;   2.查看进程 按内存从大到小排列 PS -e   -o "%C   : %p : %z ...

  4. 原型链(__proto__)

    前面详细的解释了new的几个步骤,其中随意带过了一下原型链的概念,如果细读那篇文章,基本对原型也能有所理解. 原型有两个关键属性,一个是 __proto__ 一个是 prototype ,了解了这两个 ...

  5. Thinkphp学习04

    原文:Thinkphp学习04 一.ThinkPHP 3 的输出      (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出   想分配变量可以使用as ...

  6. 14.5.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量

    14.5.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量 改变InnoDB redo ...

  7. RotateDisp – 一键旋转显示画面 - 小众软件

    RotateDisp – 一键旋转显示画面 - 小众软件 RotateDisp – 一键旋转显示画面

  8. KMP算法(具体求串的next[n])

     怎么求串的模式值next[n]   )next[0]= -1  意义:不论什么串的第一个字符的模式值规定为-1. )next[j]= -1   意义:模式串T中下标为j的字符,假设与首字符 同样,且 ...

  9. 广东省-IT公司红黑榜排名

    红榜Top100 Order Company Name Point Change  1 百富计算机技术(深圳)有限公司  94.00 --  2 中国网通广州分公司  88.00 --  3 深圳市汇 ...

  10. tmpfs(/dev/shm)

    tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储.而且传统的ramdisk是个块 ...