QingYi. 发表于 2021-1-5 09:34

【笔记】数据结构与算法之最小生成树(Kruskal算法)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static class Edge{
      int a,b,w;
      public Edge(int a,int b, int w){
            this.a = a;
            this.b = b;
            this.w = w;
      }
    }
    static int n,m;
    //总的边
    static int cnt = 0;
    static Edge[] edges;
    static int [] p;

    public static void main(String[] args) throws IOException {
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      String[] s = bf.readLine().split(" ");
      n = Integer.parseInt(s);
      m = Integer.parseInt(s);
      edges = new Edge;
      p = new int;
      for(int i =1 ;i<=n;i++){
            p = i;
      }
      for(int i = 0; i < m; i++){
            String[] res = bf.readLine().split(" ");
            int x = Integer.parseInt(res);
            int y = Integer.parseInt(res);
            int w = Integer.parseInt(res);
            edges = new Edge(x,y,w);
      }
      //权重从小到大排序
      Arrays.sort(edges,(a,b) -> a.w - b.w);
      //最小生成树权重之和
      int res =0;
      for (int i = 0; i < m; i++) {
            Edge e = edges;
            int x = find(e.a);
            int y = find(e.b);
            if (x!=y){
                res+=e.w;
                p =y;
                cnt++;
            }
      }
      if(cnt<n-1){
            System.out.println("failed");
      }else {
            System.out.println(res);
      }
    }
    public static int find(int x){
      if (p !=x){
            p = find(p);
      }
      return p;
    }
}

在新标签打开所有链接复制所有链接URL复制所有链接URL(反向)复制所有链接标题 + URL复制所有链接标题 + URL (MD)复制所有链接标题 + URL (BBS)复制所有链接标题 + URL (筛选)复制所有链接标题 + URL (设置复制格式)在新标签页打开所有图片链接在一个标签页显示所有图片链接
复选框 - 选中
复选框 - 取消
复选框 - 反选
单选框 - 选中
单选框 - 取消
特殊单选框 - 选中
页: [1]
查看完整版本: 【笔记】数据结构与算法之最小生成树(Kruskal算法)