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 + "]"; } }
相关文章推荐
- Kruskal(克鲁斯卡尔)
- 寻找最小生成树——克鲁斯卡尔(Kruskal)算法
- Num 32 : HDOJ : 1233 还是畅通工程 [ kruskal( 克鲁斯卡尔 )算法 ] [ 最小生成树 ]
- 【图】最小生成树(最小成本):克鲁斯卡尔(Kruskal)算法
- 最小生成树之克鲁斯卡尔(Kruskal)算法、普里姆(prim)算法
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- zoj 1203 Swordfish (kruskal 克鲁斯卡尔)
- 最小生成树之克鲁斯卡尔(Kruskal)算法实现,代码详解!!!!
- 普利姆(prim)算法和克鲁斯卡尔(kruskal)算法
- 最小生成树——克鲁斯卡尔(Kruskal)算法
- poj 2421 Constructing Roads kruskal克鲁斯卡尔最小生成树
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- 图的最小生成树---克鲁斯卡尔(Kruskal)算法
- 最小生成树——Kruskal(克鲁斯卡尔)算法
- 算法:图解最小生成树之克鲁斯卡尔(Kruskal)算法
- 最小生成树MST-克鲁斯卡尔(Kruskal)算法
- Kruskal(克鲁斯卡尔) 最小生成树 算法详解+模板
- 图论之最小生成树-----克鲁斯卡尔(Kruskal)算法
- 畅通工程 HDU杭电1863【克鲁斯卡尔Kruskal || Prim】
- 最小生成树——Kruskal(克鲁斯卡尔)算法