您的位置:首页 > 其它

Kruskal(克鲁斯卡尔)

2013-08-07 02:38 204 查看


 

设有一个有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 int n = 9;// 九个顶点
public static int patten[];

public static void main(String args[]) {
ArrayList<Edge> ay = new ArrayList<Edge>();
Edge p0 = new Edge(0, 1, 10);
Edge p1 = new Edge(0, 5, 11);
Edge p2 = new Edge(1, 8, 12);
Edge p3 = new Edge(1, 2, 18);
Edge p4 = new Edge(1, 6, 16);
Edge p5 = new Edge(2, 8, 8);
Edge p6 = new Edge(2, 3, 22);
Edge p7 = new Edge(3, 4, 20);
Edge p8 = new Edge(3, 7, 16);
Edge p9 = new Edge(3, 6, 24);
Edge p10 = new Edge(3, 8, 21);
Edge p11 = new Edge(4, 7, 7);
Edge p12 = new Edge(4, 5, 26);
Edge p13 = new Edge(5, 6, 17);
Edge p14 = new Edge(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 (Edge pp : ay) {
System.out.println(pp);
}
System.out.println("Kruskal(克鲁斯卡尔)");
int sum = 0;
patten = new int[n + 1];
for (int i = 1; i <= n; i++) {
patten[i] = i;
}
int i = 0;
while (ay.size() > 0) {
int jj = patten[ay.get(0).start];
int kk = patten[ay.get(0).end];
if (jj != kk) {
i++;
sum += ay.get(0).num;
fun(jj, kk);
}
System.out.println(ay.get(0));
ay.remove(ay.get(0));
}
}

public static void fun(int j, int k) {
for (int i = 1; i <= n; ++i) {
if (patten[i] == j) {
patten[i] = k;
}
}
}
}

class Edge implements Comparable<Edge> {
public int start;
public int end;
public int num;

public Edge(int start, int end, int num) {
this.start = start;
this.end = end;
this.num = num;
}

public int compareTo(Edge o) {
return this.num > o.num ? 1 : -1;
}

public String toString() {
return "[" + start + "," + end + "," + num + "]";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: