• 最小生成树之克鲁斯卡尔算法


    public class Kruskal {
        public static void main(String[] args) {
            //二维数组 分别存储边的起点 终点 和权值
            int [][]edges = {{0,1,6},{0,2,1},{0,3,5},{1,2,5},{1,4,3},{2,3,5},{2,4,6},{2,5,4},{3,5,2},{4,5,6}};
            int []connect = {0,1,2,3,4,5};//辅助数组 用来存储两个顶点是否连通 初始都不连通
            quick_sort(edges,0,edges.length-1);//对边进行排序
            
            for(int i=0;i<edges.length;i++){
                int v1 = edges[i][0]; //边的起点
                int v2 = edges[i][1]; //边的终点
                int vc1 = connect[v1]; //起点的连通状态
                int vc2 = connect[v2]; //终点的连通状态
                if(vc1 != vc2){ //如果两个点不连通 则将其加入到最小生成树 并将连通状态改为相同的状态
                    System.out.println((v1+1)+"->"+(v2+1));
                    for(int j=0;j<connect.length;j++){
                        if(connect[j] == vc2)
                            connect[j] = vc1;
                    }
                }
            }
        }
        
        public static void quick_sort(int a[][],int low,int high){
            if(low < high){
                int k = sort(a,low,high);
                quick_sort(a,low,k-1);
                quick_sort(a,k+1,high);
            }
        }
        public static int sort(int a[][],int low,int high){
            int[] k = a[low];
            while(low<high){
                while(low <high  && k[2] <= a[high][2])
                    high--;
                a[low] = a[high];
                while(low <high  && k[2] >= a[low][2])
                    low++;
                a[high] = a[low];
            }
            a[low] = k;
            return low;
        }
    }
  • 相关阅读:
    html语法规范
    html页面基本结构
    HTML头部结构详解
    文件路径中 / 和 ./ 和 ../的区别
    实体符号
    利用JS修改style属性和添加元素类名(important)
    Less
    Eureka自我保护计算
    Eureka元数据
    EurekaServer源码分析
  • 原文地址:https://www.cnblogs.com/sirhuoshan/p/4083806.html
Copyright © 2020-2023  润新知