• Kruskal最小生成树


    并查集+kruskal==>MST

    效率很低

    #include <iostream>
    using namespace std;
    
    #define MAX 105   //自己设置最大值
    
    // father[x]表示x的父节点
    int father[MAX];
    // rank[x]表示x的秩
    int rank[MAX];
    
    typedef struct
    {
        int i,j;
        int distance;
    } E;
    
    E edges[MAX*MAX];
    
    // 初始化
    void Make_Set(int n)
    {
        for(int i=1; i<=n; ++i)
        {
            father[i] = i;
            rank[i] = 0;
        }
    }
    
    // 查找
    int Find_Set(int x)
    {
        if(x != father[x])
            return Find_Set(father[x]);
        return x;
    }
    
    // 合并
    void Union(int x, int y)
    {
        x = Find_Set(x);
        y = Find_Set(y);
        if(x == y)  // x,y在同一个集合
            return;
        if(rank[x] > rank[y])
            father[y] = x;
        else if(rank[x] < rank[y])
            father[x] = y;
        else
        {
            rank[y]++;
            father[x] = y;
        }
    }
    
    bool myfunction ( const E a , const E b )
    {
        return (a.distance<b.distance);
    }
    
    int main()
    {
        freopen("input.txt","r",stdin);
        int i,j,n,m,u,v;
        int count,Sum;
        while(cin>>n&&n!=0)
        {
            count=Sum=0;
            for(i=0; i<n; i++)
                for(j=0; j<n; j++)
                {
                    edges[i*n+j].i=i;
                    edges[i*n+j].j=j;
                    cin>>edges[i*n+j].distance;
                }
            sort(edges,edges+(n*n),myfunction);
            Make_Set(n);
            for(i=0; i<n*n; i++)
            {
                if(count==n-1) break;
                if(edges[i].i!=edges[i].j&&(Find_Set(edges[i].i)!=Find_Set(edges[i].j)))
                   {
                       Union(edges[i].i,edges[i].j);
                       Sum+=edges[i].distance;
                   }
            }
            cout<<Sum<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Spring Boot入门篇(基于Spring Boot 2.0系列)
    webpack性能优化配置
    Vuex的通俗详解
    Vuefilter() 过滤器
    transition页面加载触发问题解决方案
    VUE render VS template
    provide & inject 跨组件传值
    Vue 组件通讯(组件传值)
    js封装 DOM获取
    GIT SVN 版本管理 git + gitHub
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3385603.html
Copyright © 2020-2023  润新知