Kruskal(克鲁斯卡尔)
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(克鲁斯卡尔)的更多相关文章
- 最小生成树之Kruskal(克鲁斯卡尔)算法
学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所 ...
- 经典问题----最小生成树(kruskal克鲁斯卡尔贪心算法)
题目简述:假如有一个无向连通图,有n个顶点,有许多(带有权值即长度)边,让你用在其中选n-1条边把这n个顶点连起来,不漏掉任何一个点,然后这n-1条边的权值总和最小,就是最小生成树了,注意,不可绕成圈 ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- P1546 最短网络 Agri-Net题解(克鲁斯卡尔)
P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...
- 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...
- c/c++ 用克鲁斯卡尔(kruskal)算法构造最小生成树
c/c++ 用克鲁斯卡尔(kruskal)算法构造最小生成树 最小生成树(Minimum Cost Spanning Tree)的概念: 假设要在n个城市之间建立公路,则连通n个城市只需要n-1条线路 ...
- 最小生成树之克鲁斯卡尔(kruskal)算法
#include <iostream> #include <string> using namespace std; typedef struct MGraph{ string ...
随机推荐
- js与DOM初步:访问html元素
1.DOM简介 DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个HTML或XML文 ...
- OWAP Top 10
2013 Top 10 List A1-Injection Injection flaws, such as SQL, OS, and LDAP injection occur when untr ...
- App 运营 推广相关
基本要素 1.定位和产品 2.取个好名字,一目了然+下载冲动 3.设计一个好图标,有感性和直观的认识 4.做好产品的说明.关键字,截图(前1-2行是重点) 5.做市场的排名(相关因素如下) (1) ...
- Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)
http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...
- C++ 可以多个函数声明
c/c++可以有多个函数声明,但实现只能有一个 例子: //file t_defs.h #ifndef _T_DEFS_H_ #define _T_DEFS_H_ void say(void); #e ...
- hdu1075What Are You Talking About (字典树)
Problem Description Ignatius is so lucky that he met a Martian yesterday. But he didn't know the lan ...
- WM_PARENTNOTIFY的作用(不完全)
VCL里源码如下: procedure TWinControl.WMParentNotify(var Message: TWMParentNotify); begin with Message do ...
- [C++]C++中的运行时类型检测
Date:2014-1-3 Summary: 使用C++中的运行时类型检测.(文章重点在于记录本人的使用情况,并非深层讨论RTTI) Contents:写习惯C#的我,在C++依然存在哪些.NET的惯 ...
- The mmap module
The mmap module The mmap module (New in 2.0) This module provides an interface to the operating syst ...
- tomcat各版本和jsp、jstl、servlet的依赖关系(转)
Servlet / JSP / Tomcat Version Servlet/ JSP Tomcat 2.5/2.1 6.0.18 2.4/2.0 5.5.27 2.3/1.2 4.1.3 ...