一些灵巧的求并算法
2015-10-13 11:54
211 查看
class DisjSets { public: explicit DisjSets(int numElements); int find(int x)const; int find(int x); void unionSets(int root1, int root2); private: vector<int> s; }; DisjSets::DisjSets(int numElements) : s(numElements) { for (int i = 0; i < s.size(); i++) s[i] = -1; } //下面是将两个集合并 void DisjSets::unionSets(int root1, int root2) { s[root2] = root1; } //下面是寻找一个元素所在的集合 int DisjSets::find(int x) const { if (s[x] < 0) return x; else return find(s[x]); }
//下面的是并集的一个变种,用于控制树的高度以及节点数量 void DisjSets::unionSets(int root1, int root2) { if (s[root2] < s[root1]) //root2 is deeper s[root1] = root2; else { if (s[root1] == s[root2]) s[root1]--; //如果深度相同的话,再是root1的深度变得更深一点 s[root2] = root1; //然后再让root2指向root1 } }
//对上述并集程序使用了路径压缩之后,体现在find程序上的变化 int DisjSets::find(int x)const { if (s[x] < 0) return x; else return s[x] = find(s[x]); }
相关文章推荐
- ZOJ 3910 Market
- CISCO学习笔记(七)动态路由协议-RIP
- 黑马程序员_JAVA常用的类API(Scanner,String)
- C#.NET中使用GUID
- Cache数据库的M语言之把图片转成Base64
- Jquery怎么获取select选中项 自定义属性的值
- PHP魔术函数、魔术常量、预定义常量
- MongoDB 分片(Cluster)
- java7 fork-join
- Access control allow origin 简单请求和复杂请求
- Xcode7 无法请求到数据, iOS9无法请求HTTP类型的数据
- jQuery,javascript获得网页的高度和宽度$(document).height / $(window).height
- Linux配置时间服务器
- 设计模式之状态模式
- MySQL 数据类型以及常用命令
- 拜读了《婆媳关系好坏取决于老公》一文,看似有道理,细读感觉其实应该不是那么回事
- css 微信webui
- .java生成dex文件
- vs中: 错误,未定义的标识符getline 的解决方法
- Dailog开发新方法