#include<stdio.h>
#include<stdlib.h>
int par[1000];
int boot(int a)
{
int p;
if(par[a]==a)
return a;
return par[a]=boot(par[a]);
}
void pa(int a,int b)
{
int t,p;
t=boot(a);
p=boot(b);
par[t]=p;
return ;
}
struct pi
{
int a;
int b;
int cost;
}pp[1000];
int cmp(const void*a,const void*b)
{
struct pi *c=(struct pi*)a;
struct pi *d=(struct pi*)b;
return c->cost>d->cost?1:-1;
}
int main()
{
int i,n,count=0;
for(i=0;i<n;i++)
par[i]=i;
qsort(pp,n,sizeof(pp),cmp);
for(i=0;i<n;i++)
{
if(boot(pp[i].a)!=boot(pp[i].b))
{
pa(pp[i].a,pp[i].b);
count+=pp[i].cost;
}
}
}
最小生成树kruskal算法
最新推荐文章于 2022-03-01 21:39:08 发布