继昨天的普里姆最小生成树算法后,第二种最小生成树算法——克鲁斯卡尔算法(Kruskal)
package org.tree;

public class KruskalArithmetic {
   
    public static void KruskalArithmetic(DataUnit[] edges,int vertexs){
        int m = 0;
        int n = 0;
        
        // 定义一数组用来判断边与边是否形成环路
        int[] parent = new int[vertexs];
        
        for (int i = 0; i < parent.length; i++) {
            parent = 0;
        }
        
        for (int i = 0; i < edges.length; i++) {
            DataUnit dataUnit = edges;
            n = Find(parent, dataUnit.begin);
            m = Find(parent, dataUnit.end);
            
            //判断是否该顶点在生成最小生成树时产生回路
            if(n!=m){
                parent[n] = m;
                // 以下打出的每条边,就是我们最小生成树上的变
                System.out.println("("+dataUnit.begin+","+dataUnit.end+")  "+dataUnit.weight);
            }
            
        }
        
    }

    private static int Find(int[] parent,int f){
        while(parent[f]>0){
            f = parent[f];
        }
        return f;
    }
   
   
    public static void main(String[] args) {
        DataUnit[] edges = new DataUnit[7];
        //权值一定要由小到大,否则结果不是我要要的
        edges[0] = new DataUnit(2, 3, 1);
        edges[1] = new DataUnit(2, 4, 3);
        edges[2] = new DataUnit(0, 1, 4);
        edges[3] = new DataUnit(1, 2, 5);
        edges[4] = new DataUnit(0, 2, 6);
        edges[5] = new DataUnit(3, 4, 7);
        edges[6] = new DataUnit(0, 4, 8);
        
        KruskalArithmetic(edges, 5);
    }
}


/**
* 此数据结构是为了配合Kruskal算法而定义的
* @author burgess
*/
class DataUnit{
    //为了方便定义成public
    public int begin;                            //用来存储起始顶点
    public int end;                             //用来存储结束顶点
    public int weight;                          //用来存储权
   
    public DataUnit(int begin, int end, int weight) {
        super();
        this.begin = begin;
        this.end = end;
        this.weight = weight;
    }
   
    //以下略
}


注意:当用Kruskal算法时,请注意所有边的集合一定要保证权值由小到大,否则,将得不出我们要的最小生成树答案。
网上这种算法讲解很多,我仅仅在注释上给大家略讲了下。希望各位饭友学习愉快。如有错误,欢迎指教!!!

此算是我在书上看到的,我仅仅只是将原来的C代码翻译成java代码,所以写的原创,请勿乱喷,希望大家学习开心!!!