kruskal(1)
来源:互联网 发布:python工厂模式 编辑:程序博客网 时间:2024/06/05 11:56
就因为这个kruskal我几乎崩溃了,在我机子上运行一切完好的程序可是一提交zoj就说我段错误,我知道我犯了很严重的错误,关键我自己就是找不出来,先把代码晾这,可是这代码是错误的
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define MAX 1000int n,m,father[MAX],son[MAX];int flag=0;double sum=0.0;struct edge{int a;int b;double w;}edges[MAX];int cmp(const void *a,const void *b){edge aa=*(const edge *)a;edge bb=*(const edge *)b;return aa.w-bb.w;}void UFset(){int i;for(i=1;i<=m;++i){father[i]=i;son[i]=1;}}int unionsearch(int x){return x == father[x] ? x : unionsearch(father[x]);}bool Find(int x,int y){int root1=unionsearch(x);int root2=unionsearch(y);if(root1==root2)return false;else if(son[root1]>=son[root2]){father[root2]=root1;son[root1]+=son[root2];}else{father[root1]=root2;son[root2]+=son[root1];}return true;}void kruskal(){int i,total=0;UFset();for(i=1;i<=n;++i){if(Find(edges[i].a,edges[i].b)){//printf(""); printf("%d->%d=%0.2lf\n",edges[i].a,edges[i].b,edges[i].w);sum+=edges[i].w;total++;}if(total==m-1)break;flag=1; }}int main(){//freopen("in.txt","r",stdin);int i;scanf("%d %d",&m,&n);for(i=1;i<=n;++i)scanf("%d %d %lf",&edges[i].a,&edges[i].b,&edges[i].w);cout<<endl;qsort(edges,n+1,sizeof(edges[0]),cmp);//这个参数很有意思啊,感觉比个数多一个才能用啊kruskal();if(flag)printf("%0.2lf\n",sum);elseprintf(" Data Error!\n");return 0;}
0 0
- kruskal(1)
- 1poj2377(Kruskal||枚举)
- Kruskal
- kruskal
- kruskal
- kruskal
- Kruskal
- Kruskal
- kruskal
- kruskal
- kruskal
- kruskal
- kruskal
- Kruskal
- Kruskal
- Kruskal
- kruskal
- (Kruskal算法)Constructing Roads(12.1.1)
- SOCKET中INADDR_LOOPBACK和INADDR_ANY的区别
- Remember me
- 黑马程序员-IO流 01
- 初识软件工程
- typedef用法(转载)
- kruskal(1)
- Win7更改文件夹权限
- 1002N!(C语言N的阶乘 大数模板)
- Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下)
- 幸运三角形(nyoj 491)
- 黑马程序员-IO流 02
- 开学了
- [转载]STM32的时钟树深入详解
- Codeforces 388 C. Fox and Card Game