2017 3 25 c连通性问题
来源:互联网 发布:淘宝贷款额度突然没了 编辑:程序博客网 时间:2024/05/30 02:26
关于c算法在开篇的连通性问题的并集查找算法的总结
1-1连通性问题的快速查找解决方案
#include<stdio.h>#define N 10000main(){ int i,p,q,t,id[N]; for(i=0;i<N;i++) id[i]=i; while(scanf("%d %d\n",&p,&q)==2) { if(id[p]==id[q]) continue; for(t=id[p],i=0;i<N;i++) { if(id[i]==t) id[i]=id[q]; } printf(" %d %d\n",p,q); }return 0;}
用以下的代码替换while循环体
for(i=p;i!=id[i];i=id[i]);for(j=q;j!=id[j];j=id[j]);if(i==j) continue;id[i]=j;printf(" %d %d\n",p,q);
快速并集的加权版本
用一个额外的数组sz完成维护的目的,为每个对象用id[i]==i来表示,即在关联树中节点的数量.因此并集运算可以连接两颗指定树中的较小者和较大者,以阻止树中长路径的增长#include<stdio.h>#define N 10000main(){ int i,j,p,q,id[N],sz[N]; for(i=0;i<N;i++) { id[i]=i;sz[i]=1; } while(scanf("%d %d\n",&p,&q)==2) { for(i=p;i!=id[i];i=id[i]); for(j=q;j!=id[j];j=id[j]); if(i==j) continue; if(sz[i]<sz[j]) { id[i]=j;sz[j]+=sz[i]; } else {id[j]=i;sz[i]+=sz[j];} printf(" %d %d\n",p,q); } return 0;}
对分路径进行压缩
代替for循环可以对分我们所遍历的路径长度结果是经过一个长运算序列后,树变得几乎扁平
for(i=p;i!-id[i];i=id[i]) id[i]=id[id[i]];for(j=q;j!=id[j];j=id[j]) ;if[j]=id[id[j]];
0 0
- 2017 3 25 c连通性问题
- 连通性问题--Algorithms IN C读书笔记
- 连通性问题--《C算法》学习笔记
- 连通性问题
- 连通性问题
- 连通性问题
- 连通性问题
- 连通性问题
- 连通性问题
- 连通性问题
- 连通性问题的快速查找解决方案(C语言实现)
- 连通性问题(算法)
- Sicily 4335. 连通性问题
- 【研究总结】连通性问题
- 1006. 连通性问题
- 动态连通性问题
- 图的连通性问题
- 数据结构的连通性问题
- Android IPC机制(一)
- FFmpeg 初始化
- Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
- 关于Android使用socket与PC连接的问题
- 支持向量机(svm)推导过程
- 2017 3 25 c连通性问题
- 黑手论坛C++编程系列vip培训教程
- 关键字、数据类型、访问权限
- 1031. 查验身份证(15) python篇
- Laravel
- 如何用c语言创建文件夹
- Lintcode 372.在O(1)时间复杂度里删除节点
- C++指针、引用和Java引用 区分
- 关于浮点(float)类型加减乘除保留两位精度工具类。