zoukankan      html  css  js  c++  java
  • Kruskal(克鲁斯卡尔)

    设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,
    没有边的非 连通图 T={V, E}, 图中每个顶点自成一个连通分量。
    当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,
    则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。
    如此重复下去,直到所有顶点在同一个连通分量上为止。
    import java.io.BufferedInputStream;
    import java.util.*;
    /*
     * @author denghuilong 
     *  
     * 2013-8-7上午11:36:00
     *
    */
    public class Kruskal{
    	public static void main(String args[]){
    		ArrayList<P> ay=new ArrayList<P>();
    		P p0=new P(0, 1, 10);
    		P p1=new P(0, 5, 11);
    		P p2=new P(1, 8, 12); 
    		P p3=new P(1, 2, 18);
    		P p4=new P(1, 6, 16);
    		P p5=new P(2, 8, 8);
    		P p6=new P(2, 3, 22);
    		P p7=new P(3, 4, 20);
    		P p8=new P(3, 7, 16);
    		P p9=new P(3, 6, 24);
    		P p10=new P(3, 8, 21);
    		P p11=new P(4, 7, 7);  
    		P p12=new P(4, 5, 26);
    		P p13=new P(5, 6, 17);
    		P p14=new P(6, 7, 19);
    		ay.add(p0);
    		ay.add(p1);
    		ay.add(p2);
    		ay.add(p3);
    		ay.add(p4);
    		ay.add(p5);
    		ay.add(p6);
    		ay.add(p7);
    		ay.add(p8);
    		ay.add(p9);
    		ay.add(p10);
    		ay.add(p11);
    		ay.add(p12);
    		ay.add(p13);
    		ay.add(p14);
    		System.out.println("按权值排序");
    		Collections.sort(ay);
    		for(P pp:ay){
    			System.out.println(pp);
    		}
    		System.out.println("Kruskal(克鲁斯卡尔)");
    		int length=ay.size();
    		int patten[]=new int[length];//判断是否构成回路
    		for(int i=0;i<length;i++){
    			//查找定点尾部的下标
    			int n=find(patten,ay.get(i).start);
    			int m=find(patten,ay.get(i).end);
    			if(n!=m){
    				patten[n]=m;
    				System.out.println(ay.get(i));
    			}
    		}	
    	}
    	public static int find(int patten[],int m){
    		
    		return patten[m]>0?patten[m]:m;
    	}
    }
    class P implements Comparable<P>{
    	public  int start;
    	public int end;
    	public int num;
    	public P(int start, int end, int num) {
    		this.start = start;
    		this.end = end;
    		this.num = num;
    	}
    	public int compareTo(P o) {
    		return this.num>o.num?1:-1;
    	}
    	public String toString(){
    		return "["+start+","+end+","+num+"]";
    	}
    }


  • 相关阅读:
    jquery保存用户名和密码到cookie里面
    avalon框架
    mybatis分页插件
    获取前台查询条件的公用方法
    mybatis分页插件
    maven出错The folder is already a source folder
    Jquery图片上传预览效果
    springMVC文件上传
    自动将String类型的XML解析成实体类
    JavaScript 引擎
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3243760.html
Copyright © 2011-2022 走看看