尚在调试中。。。。。
#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
struct node
{
int x,y,len;
}e[1000];
int f[100]={0},n,m,k,sum;
int cmp(const void *x,const void *y)
{
return (*(struct node *)x).len-(*(struct node *)y).len;
}
int getf(int v)
{
if(f[v]==v)
return v;
else
{
f[v]=getf(f[v]);
return f[v];
}
}
void merge(int v,int u)
{
if( getf(f[v]) != getf(f[u]) )
f[f[u]]=f[v];
}
int query(int v,int u)
{
if(getf(v)==getf(u))
return 1;
else
return 0;
}
int main()
{
int i,x,y;
while(scanf("%d",&n) && n)
{
for(i=1;i<=n;i++)
qsort(&e[1],m,sizeof(e[0]),cmp);
for(i=1;i <= n;i++)
f[i]=i;
i=1;k=0;sum=0;
while(k < n)
{
if( query(e[i].x,e[i].y)==0 )
{
k++;
sum += e[i].len;
merge(e[i].x,e[i].y);
}
i++;
}
printf("%d",sum);
return 0;
}
}