首页 新闻 会员 周边 捐助

畅通工程,,我的程序错在哪里

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-07-23 14:05

#include <stdio.h>  
#include <stdlib.h>    
int father[101];
struct road
{
 int u,v,len;
};
int compare(const void*a,const void*b);
int find(int x);
void Union(int x,int y);
int main()
{
 struct road path[5100];
 int m,n,i,pv,pu,s;
 while(scanf("%d",&n)!=EOF&&n!=0)
 {
  m=n*(n-1)/2;
  for(i=1;i<=n;i++)
   father[i]=i;
  for(i=0;i<m;i++)
  {
   scanf("%d %d %d",&path[i].u,&path[i].v,&path[i].len);
  }
  
  qsort(path,m,sizeof(path[0]),compare);
  for(s=i=0;i<m;i++)
  {
   pv=find(path[i].u);
   pu=find(path[i].v);
   if(pv!=pu)
   {
    s=s+path[i].len;
    Union(pv,pu);
   }
  }
  printf("%d\n",s);
 }
 return 0;
}
int find(int x)
{
 if(x!=father[x])
  father[x]=find(father[x]);
 return father[x];
}
void Union(int x,int y)
{
 int a=find(x);
 int b=find(y);
 if(a!=b)
  father[b]=a;

}
int compare(const void*a,const void*b)
{

 return *(*int)a-*(int*)b;

一夜成魔的主页 一夜成魔 | 初学一级 | 园豆:196
提问于:2014-07-22 16:40
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册