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+"]"; } }