这里是有个问题要请教-安慰奶牛的Kruscal算法

这个题目是来自蓝桥杯的算法训练的一道题,但是下面的代码测试之后只得了10分,大神们帮帮忙看一下到底是什么原因
import java.util.*;
class Edge  {
 int u;
 int v;
 int w;
 
 public Edge(int u, int v, int w) {
  this.u = u;
  this.v = v;
  this.w = w;
 }
 public Edge() {
  // TODO Auto-generated constructor stub
 }
 
}
public class Main2 {
    public static void sort(Edge[] e) {  // 排序算法-按照权值从小到大排序
     Edge edge1=new Edge();
     for(int i=0;i<e.length;i++) {
   for(int j=i;j<e.length;j++) {
    if(e[i].w>e[j].w) {     
     edge1=e[j];
     e[j]=e[i];
     e[i]=edge1;
    }
   }
  }
    }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Scanner s=new Scanner(System.in);
  int N=s.nextInt();
  int P=s.nextInt();
  Edge[] edges=new Edge[P];
  int[] a=new int[N];
  for(int i=0;i<N;i++) {
   a[i]=s.nextInt();
  }
  for(int i=0;i<P;i++) {
   int u=s.nextInt();
   int v=s.nextInt();
   int w=s.nextInt();
   Edge edge=new Edge(u,v,2*w);
   edges[i]=edge;
  }
  for(int j=0;j<N;j++) {
   for(int i=0;i<P;i++) {
    if(edges[i].u==j+1) {
     edges[i].w+=a[j];
    }
   }
  }
  for(int j=0;j<N;j++) {
   for(int i=0;i<P;i++) {
    if(edges[i].v==j+1) {
     edges[i].w+=a[j];
    }
   }
  }
  sort(edges);
  //克鲁斯卡尔算法
  Set<Integer> ss=new TreeSet<Integer>();
  int min_sum=edges[0].w;
  for(int i=1;i<P;i++) {     
      if(ss.contains(edges[i].u)&&ss.contains(edges[i].v)) {    //先把最小边的两点存入Set中,再将满足该条件的边值点存入Set
       continue;
      }else {
       min_sum+=edges[i].w;
       ss.add(edges[i].u);
       ss.add(edges[i].v);
      }           
     }
  Arrays.sort(a);    //对Ci进行排序
  System.out.println(min_sum+a[0]);//最后输出的时候要加上Ci最小的值得点
 }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值