kruskal()模板

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int n,m,set[124];

struct val

{

    int x,y,v;

}e[10010];

int find(int x)

{

   return set[x]==x?x:find(set[x]);

}

int kruskal()

{

    int sum=0;

    for(int i=1;i<=m;i++)

    {

        int x=e[i].x,y=e[i].y,v=e[i].v;

        int a=find(x),b=find(y);

        if(a!=b)

        {

            set[b]=a;

            sum+=v;

        }        

    }

    return sum;

}

int cmp(const void *a,const void *b)

{

    return ((val *)a)->v-((val *)b)->v;

}

int main()

{

    int x,y,v;

    while(scanf("%d%d",&n,&m)!=EOF)

    {

        for(int i=1;i<=n;i++)//初始化

        {

            set[i]=i;        

        }

        for(int i=1;i<=m;i++)

        {

            scanf("%d%d%d",&x,&y,&v);

            e[i].x=x;

            e[i].y=y;

            e[i].v=v;

        }

        qsort(e+1,m,sizeof(e[0]),cmp);快排

        int res=kruskal();

        printf("%d\n",res);

    }

    system("pause");

    return 0;

}

你可能感兴趣的:(模板)