最小生成树之kruskal方法实现 (java)
今天是个阴天,下了点雨,work .........
步骤:将所有边排序,然后不断从小到大加上边,这个过程最重要的是避免环的产生,此处用并查集。(nyoj 38)
package 最小生成树; import java.util.Arrays;
import java.util.Scanner;
class Node implements Comparable<Node>
{
int x;
int y;
int val;
public Node(int x,int y,int val)
{
this.x=x;
this.y=y;
this.val=val;
}
@Override
public int compareTo(Node o) {
return this.val-o.val;
} } public class Main { public static void init(int a[])//并查集初始化,用来判断是否有环
{
for(int i=1;i<a.length;i++)a[i]=i; }
public static int find(int a[],int x) //查找节点的父亲,没有优化的方法
{
while(a[x]!=x)
{
x=a[x];
} return x;
}
public static boolean union(int a[],int x,int y)//union一条边
{
int fx=find(a, x);
int fy=find(a, y);
if(fx!=fy)
{
a[fx]=fy;
return true; //成功加入 }
return false;//成环 } public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scn=new Scanner(System.in);
int len=scn.nextInt();
while(len-->0)
{
int ans=0;//保存最后的答案
int v=scn.nextInt();
int e=scn.nextInt();
Node n[]=new Node[e];
for(int i=0;i<e;i++)
{
n[i]=new Node(scn.nextInt(),scn.nextInt(),scn.nextInt()); } Arrays.sort(n);
//并查集的初始化
int father[]=new int[v+1];
init(father);
int index=0;
for(int i=0;i<e;i++)
{
if(union(father, n[i].x,n[i].y))
{ index++; //没成环,加入这条边
ans+=n[i].val; }
if(index==v-1)
{
break;
} }
int min=scn.nextInt(); for(int j=1;j<v;j++)
{
int temp=scn.nextInt();
if(min>temp) min=temp; }
System.out.println(ans+min); } } }
最小生成树之kruskal方法实现 (java)的更多相关文章
- 数据结构与算法--最小生成树之Kruskal算法
数据结构与算法--最小生成树之Kruskal算法 上一节介绍了Prim算法,接着来看Kruskal算法. 我们知道Prim算法是从某个顶点开始,从现有树周围的所有邻边中选出权值最小的那条加入到MST中 ...
- 最小生成树的Kruskal算法实现
最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...
- 最小生成树之Kruskal算法
用Kruskal方法解决无向连通图最小生成树问题: 1所有的点初始化的时候自成一个集合 2所有的边按照权值大小,从小到大排序 3选取权值小的边加入现有集合中,且加入后必须不构成环路,加入后,记录点的祖 ...
- 最小生成树之Kruskal
模板题,学习一下最小生成树的Kruskal算法 对于一个连通网(连通带权图,假定每条边上的权均为大于零的实数)来说,每棵树的权(即树中所有边的权值总和)也可能不同 具有权最小的生成树称为最小生成树 生 ...
- ZOJ 1203 Swordfish 旗鱼 最小生成树,Kruskal算法
主题链接:problemId=203" target="_blank">ZOJ 1203 Swordfish 旗鱼 Swordfish Time Limit: 2 ...
- 记一次使用修改字节码的方法解决java.lang.NoSuchMethodError
接兔兔国际sdk ane 充值界面选择兔币充值就会闪退, 观察logcat 04-19 10:10:54.224: E/AndroidRuntime(20315): FATAL EXCEPTION: ...
- JAVA写JSON的三种方法,java对象转json数据
JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...
- 经典问题----最小生成树(kruskal克鲁斯卡尔贪心算法)
题目简述:假如有一个无向连通图,有n个顶点,有许多(带有权值即长度)边,让你用在其中选n-1条边把这n个顶点连起来,不漏掉任何一个点,然后这n-1条边的权值总和最小,就是最小生成树了,注意,不可绕成圈 ...
- maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法
另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...
随机推荐
- ACE 6.2.0 AIX 编译
注:ace只能使用gnu的make 一.IBM AIX版本 $unameAIX$oslevel6.1.0.0$ ACE+TAO+CIAO-6.2.0.tar 二.GNU make版本:make-3. ...
- MongoDB入门三步曲1--安装、基本操作
mongodb 基本操作 目录 mongodb安装 mongod启动 mongo shell启动 mongod 停止 mongodb基本操作:CRUD 数据插入 数据查询 数据更新 数据删除 集合删除 ...
- CSS中Padding的用法
Padding的英文意思是填充,在CSS中则是设置内边距属性. padding不允许使用负值 1. 四个参数时: padding: 10px,20px,30px,40px; 上边距:10px 右边距: ...
- javascript获取url中对应参数的方法
利用正则表达式和location.search方法,可以简便的获取到对应的参数: function getQueryString(name) {var reg = new RegExp(" ...
- IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
以往的Eclipse.NetBeans等开发工具不同,IDEA的Project相当与Eclipse的Workspace,而Module相当于Project. 下边就给出Eclipse与IDEA的概念的 ...
- about building flying sauser
download flying sauser: unzip flyingsaucer-master.zip cd flyingsaucer-master/ mvn install
- 不相交集合ADT
不相交集合数据结构保持一组不相交的动态集合S={S1,S2,...,SK},每个集合通过一个代表来识别,代表即集合中的某个成员. 如果x表示一个对象,不相交集合支持以下操作: MAKE-SET(x): ...
- codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre
C. Lieges of Legendre 题意:给n,m表示有n个为2的倍数,m个为3的倍数:问这n+m个数不重复时的最大值 最小为多少? 数据:(0 ≤ n, m ≤ 1 000 000, n + ...
- JLink软件升级到4.92之后,Jlink不能用了
JLink软件升级到4.92之后,Jlink不能用了 情景描述: Jlink软件升级到4.9 ...
- C语言杂记
strcmp函数是可以和int数字进行比较的 , , , }; puts(ch); if (strcmp("AAA", ch)) { printf("real?true! ...