最小生成树

Posted kyledeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小生成树相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

int n,m;
int f[5005];

void clean()
{
    for(int i=1;i<=n;i++)
    {
        f[i]=i;
    }
}//初始化并查集 

int mf(int v)
{
    if(f[v]==v) return v;
    else
    {
        f[v]=mf(f[v]);
        return f[v];
    }
}//找爹 

void mer(int a,int b)
{
    int af=mf(a);
    int bf=mf(b);
    if(af!=bf)
    {
        f[bf]=af;
    }
}//合并 

struct make_edge
{
    int a;
    int b;
    int w;
};//每条边 

make_edge edge[200005];

bool cmp(make_edge a,make_edge b)
{
    return a.w<b.w;
}

int main()
{
    cin>>n>>m;
    clean();
    for(int i=1;i<=m;i++)
    {
        int a,b,w;
        cin>>a>>b>>w;
        edge[i].a=a;
        edge[i].b=b;
        edge[i].w=w;
        edge[i].a=b;
        edge[i].b=a;
        edge[i].w=w;
    }
    sort(edge+1,edge+m+1,cmp);//排序 
    int count=0;//边数 
    int sum=0;
    for(int i=1;i<=m;i++)
    {
        if(mf(edge[i].a)==mf(edge[i].b)) continue;
        else
        {
            mer(edge[i].a,edge[i].b);
            sum+=edge[i].w;
            count++;
        }
        if(count==n-1)
        {
            break;
        }
    }
    if(count<n-1) cout<<"orz"<<endl;
    else cout<<sum<<endl;
    return 0;
}

 

以上是关于最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

最小生成树matlab代码Kruskal算法,用于二维网络生成

c语言最小生成树

最小生成树及Prim算法及Kruskal算法的代码实现

数据结构 图连通与最小生成树

次最小生成树 模版

图的最小生成树算法(图解+代码)| 学不会来看我系列