zoj1372 Networking 最小生成树

最初,为了熟悉qsort用法,排序过程用了qsort,然后Floating Point Error 了7次。。。。。。终于,当我把可疑的地方找遍后,无果,于是果断放弃qsort,改为选择排序,终于出现了WA,天啊,第一次见到WA却是这么的高兴哭。。。后来,WA了5次,把可疑的地方找遍后,无果,于是果断放弃我引以自豪的输入时数据处理,改成平常的把所有数据都存起来。。。。。AC了。。

我去,改以前的代码找不到了!!!!!啊啊啊啊啊啊!太长了,也不写了,忘了吧,以后还是老实点,别想什么奇思妙想了。。。。。

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    int x,y;
    int w;
}NODE; 
NODE node[3000];
int pre[55];

void  change(int *x,int *y)//想用一次qsort吧还出错。。。。。。
{  
    int t;  
   t=*x;  
   *x=*y;  
   *y=t;  
}  
int find(int x)
{
    while(x!=pre[x])
      x=pre[x];
    return x;
}  
int kruskal(int k)
{
    int i,j,a,b,h,sum=0;
    for(i=0;i<k-1;i++)  
       {  
           h=i;  
           for(j=i+1;j<k;j++)  
              if(node[h].w>node[j].w)  
                    h=j;                                
           if(h!=i)  
           {  
                change(&node[i].x,&node[h].x); 
                change(&node[i].y,&node[h].y);  
                change(&node[i].w,&node[h].w);  
            }  
        }       
    
    for(i=0;i<k;i++)        //感觉这次的kruskal写的有些感觉了
    {
        a=find(node[i].x);
        b=find(node[i].y);
        
        if(a!=b)
        {
            sum+=node[i].w;
            pre[b]=a;
        }
     
    }
    return sum;
}
int main()
{ 
    int p,r,i,j;  
    while(scanf("%d",&p)&&p)
    {
        scanf("%d",&r);
        for(i=0;i<=p;i++)
          pre[i]=i;
        for(i=0;i<r;i++)
            scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].w);
    
       printf("%d\n",kruskal(r));
    }
     return 0;
  }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值