zoukankan      html  css  js  c++  java
  • Kruscal示例程序

    其中n和m分别表示图的顶点数和边数。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<string>
    #include<cmath>
    #include<map>
    #include<algorithm>
    using namespace std;
    
    const int maxn=11;
    const int maxm=20;
    int n,m;
    
    struct Edge
    {
        int u,v,w;
    } edges[maxm];
    
    class set
    {
    public:
        void makeset(int n)
        {
            for(int i=0; i<n; i++)
            {
                father[i]=i;
                rank[i]=1;
            }
        }
        int findset(int x)
        {
            if(x!=father[x])
                father[x]=findset(father[x]);
            return father[x];
        }
        void unionset(int x,int y)
        {
            x=findset(x);
            y=findset(y);
            if(x==y)  return;
            if(rank[x]>rank[y])
            {
                father[y]=x;
                rank[x]+=rank[y];
            }
            else
            {
                father[x]=y;
                rank[y]+=rank[x];
            }
        }
    private:
        int father[maxn];
        int rank[maxn];
    } ufs;
    
    int cmp(const void* a,const void* b)
    {
        Edge aa=*(const Edge*)a, bb=*(const Edge*)b;
        return aa.w-bb.w;
    }
    void kruskal()
    {
        int sumw=0,num=0;
        int u,v;
        ufs.makeset(n);
        for(int i=0; i<m; i++)
        {
            u=edges[i].u;
            v=edges[i].v;
            if(ufs.findset(u)!=ufs.findset(v))
            {
                printf("%d %d %d\n",u,v,edges[i].w);
                ufs.unionset(u,v);
                sumw+=edges[i].w;
                num++;
            }
            if(num>=n-1) break;
        }
        printf("weight of MST is %d\n",sumw);
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=0; i<m; i++)
                scanf("%d%d%d",&edges[i].u,&edges[i].v,&edges[i].w);
            qsort(edges,m,sizeof(edges[0]),cmp);
            kruskal();
        }
        return 0;
    }
  • 相关阅读:
    Amazon Route 53
    监控应用程序负载均衡器ALB
    DynamoDB 流
    DynamoDB 中的限制
    Amazon SNS 消息属性
    关于基于 SAML 2.0 的联合身份验证
    Amazon EBS 性能提示
    Laravel5.1注册中间件的三种场景
    编译LNMP环境
    傻瓜式搭建LAMP环境
  • 原文地址:https://www.cnblogs.com/54zyq/p/3109260.html
Copyright © 2011-2022 走看看