zoukankan      html  css  js  c++  java
  • Kruskal算法初步

    2017-09-18 21:53:00

    writer:pprp

    代码如下:

    /*
    @theme: kruskal
    @writer:pprp
    @date:2017/8/19
    @begin:21:19
    @end:21:50
    @declare:
    */
    
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 2000;
    const int INF = 999999999;
    int n , e;
    struct node
    {
        int x, y, w;
    };
    vector<node> vt;
    int dad[maxn];//每个结点的父亲集合
    
    bool cmp(const node& n1, const node& n2)
    {
        return n1.w < n2.w;
    }
    
    int getfather(int x)
    {
        if(x == dad[x])
            return x;
        dad[x] = getfather(dad[x]);
        return dad[x];
    }
    
    void kruskal()
    {
        for(int i = 1; i <= n ;i++)
            dad[i] = i;
        int cnt = 1, ans = 0;
        for(int i = 1; i <= e ;i++)
        {
            if(getfather(vt[i-1].x)!=getfather(vt[i-1].y))
            {
                ans += vt[i-1].w;
                dad[getfather(vt[i-1].x)] = vt[i-1].y;
                cnt++;
                if(cnt == n)
                {
                    cout << ans << endl;
                    return ;
                }
            }
        }
        return ;
    }
    
    
    int main()
    {
        freopen("in.txt","r",stdin);
        cin >> n >> e;
        for(int i = 0 ; i < e; i++)
        {
            node newnode;
            cin >>newnode.x >> newnode.y >> newnode.w;
            vt.push_back(newnode);
        }
        sort(vt.begin(),vt.end(),cmp);
        kruskal();
    
        return 0;
    }
  • 相关阅读:
    4.8日学习
    Apache安装
    HTML5 review
    个人阅读作业LAST
    个人阅读作业Week7
    结对编程:界面模块总结
    个人博客作业Week3
    结对编程博客
    个人博客week2
    软工第一次作业简单总结
  • 原文地址:https://www.cnblogs.com/pprp/p/7545489.html
Copyright © 2011-2022 走看看