Java Kruskal

最小生成树

http://www.nowcoder.com/questionTerminal/735a34ff4672498b95660f43b7fcd628

Kruskal裸题 直接套模板

(本来想再写一个Prim.... 太难了)

    public int miniSpanningTree (int n, int m, int[][] cost) {
        // write code here
        int[] father = new int[n+1];
        for(int i=0;i<father.length;++i){
            father[i] = i;
        }

        PriorityQueue<Node> queue = new PriorityQueue<>((a,b)->a.cost-b.cost);
        for(int [] c: cost){
            queue.add(new Node(c[2],c[1],c[0]));
        }

        int ans = 0;
        while(!queue.isEmpty()){
            Node cur = queue.poll();
            if(find(father,cur.start) != find(father,cur.end)){
                ans += cur.cost;
                union(father,cur.start,cur.end);
            }
        }
        return ans;

    }

    static class Node{
        int cost;
        int start;
        int end;
        public Node(int c,int s , int e){
            this.start=s;
            this.end = e;
            this.cost = c;
        }
    }

    public int find(int[] f,int a){
        if(f[a] ==a){
            return a;
        }
        return f[a]=find(f,f[a]);
    }

    public void union(int[] f, int a ,int b){
        int fa = find(f,a);
        int fb = find(f,b);
        f[fa]=fb;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
10-17 16:07
门头沟学院 Java
牛牛大你18号:在汇报,突然弹出来,,领导以为我在准备跳槽,刚从领导办公室谈心出来
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务