这里是有个问题要请教-安慰奶牛的Kruscal算法
2018-03-06 16:40
155 查看
这个题目是来自蓝桥杯的算法训练的一道题,但是下面的代码测试之后只得了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
;
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最小的值得点
}
}
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
;
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最小的值得点
}
}
相关文章推荐
- ALGO-6 安慰奶牛 — 最小生成树的引申问题(java)
- 蓝桥杯-【安慰奶牛】-最小生成树问题-【C++】
- 安慰奶牛 问题描述 Farmer John变得非常懒,他不想再继续维
- 请教高手问题,急??
- 多层调用对话框,消息循环的问题请教各位大侠
- 请教一个读文件的问题
- OCS2007边缘服务器问题请教
- 算法训练 安慰奶牛
- <项目一>请教一个关于获取post json数据的问题
- bzoj1232 [Usaco2008Nov]安慰奶牛cheer
- 请教关于ISA SERVER 2004的问题
- 蛙蛙请教:动态拼接表格问题的解决
- 请教:oa办公问题 上传word文档后,通过ie阅读,再修改后覆盖服务器端的原文件
- 关于键盘钩子的问题,请教大家
- 向真正Java高手请教ant构建工具的类装载器问题
- TCP状态图和常见问题这里有待研究,怎么是九种状态
- 1232: [Usaco2008Nov]安慰奶牛cheer
- 奶牛问题
- 请教问题时,经常不会说的一些英语,
- 请教:有关引用的问题