Hdu oj 1233 还是畅通工程

来源:互联网 发布:易语言cc攻击源码 编辑:程序博客网 时间:2024/06/05 04:51

分析:Kruskal算法思想:按照边的权值的顺序从小到大查看一遍,如果不产生环(重边也算在内),就把当前这条边加入到生成树中。

#include<stdio.h>#include<algorithm>using namespace std;int per[110];int n;struct stu{int u,v,w;}edge[10000];int cmp(stu x,stu y){return x.w<y.w;}void init(){for(int i=1;i<=110;i++)per[i]=i;}int find(int x){if(x==per[x])return x;elsereturn per[x]=find(per[x]);}bool join(int x,int y){int fx=find(x),fy=find(y);if(fx!=fy)//确定是否生成环     {    per[fy]=fx;    return true;    }elsereturn false;}int main(){while(scanf("%d",&n),n){int i,sum=0,m;m=n*(n-1)/2;init();for(i=0;i<m;i++)//注意下标scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);sort(edge,edge+m,cmp);//注意下标 for(i=0;i<m;i++){if(join(edge[i].u,edge[i].v))sum+=edge[i].w;}printf("%d\n",sum);}return 0;}


 

1 0
原创粉丝点击