排列组合算法之二: 01转换法_java改变后的c++改进版
来源:互联网 发布:怎么下载ubuntu镜像 编辑:程序博客网 时间:2024/06/10 04:15
http://blog.csdn.net/canguanxihu/article/details/46363375
排列组合算法之一: 01转换法_java改变后的c++版
class ZuheAssistArray{public: typedef std::vector<std::vector<int> > TZuheResult; ZuheAssistArray(int srcLen, int m) { int n = srcLen; //C(n,m) // 生成辅助数组。首先初始化,将数组前m个元素置1,表示第一个组合为前m个数。 std::vector<int> tempNum(srcLen, 0); for(int i = 0; i < m; ++i) { tempNum[i] = 1; } std::vector<int> oneof; m_zuheCalculation.push_back(createResult(tempNum, n, oneof));// 打印第一个默认组合 // 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01” for (int i = 0; i < n - 1; i++) { if (tempNum[i] == 1 && tempNum[i + 1] == 0) { tempNum[i] = 0; tempNum[i + 1] = 1; std::sort(tempNum.begin(), tempNum.begin() + i, compare); m_zuheCalculation.push_back(createResult(tempNum, n, oneof)); i = 0; continue; } } // 不判断是否为最后一个组合:计算结束时,不再有10组合 } static bool compare(int a, int b){ if(a > b){ return true; }else{ return false; } } //使用举例函数 static void example() { int a[] = { 1, 2, 3, 4, 5 }; // 整数数组 int m = 3; // 待取出组合的个数 ZuheAssistArray zuhe(5, m); printZuheResult(a, zuhe.m_zuheCalculation); } // 打印组合结果 static void printZuheResult(const int src[], TZuheResult zhr) { for (auto it = zhr.begin(); it != zhr.end(); it++) { for (auto itEle = it->begin(); itEle != it->end(); itEle++) { cout << src[*itEle] << " "; } cout << std::endl; } }public: TZuheResult m_zuheCalculation;private: // 根据辅助数组和原始数组生成 结果数组 std::vector<int> & createResult(const std::vector<int>& assist, const int srcLen, std::vector<int> &dst) { dst.clear(); for (int i = 0; i < srcLen; i++) { if (assist[i] == 1) { dst.push_back(i); } } return dst; }};
0 0
- 排列组合算法之二: 01转换法_java改变后的c++改进版
- 排列组合算法之一: 01转换法_java改变后的c++版
- 组合之01转换法
- 算法:排列组合之C(N,M)
- 探索并优化组合算法的中的01移位转换法(非递归)
- C语言之排序算法-冒泡法的改进
- “金箍咒”我的全排列组合算法设计演化之二有趣的分解式嵌套
- {C语言算法}排列组合
- C++:排列组合算法
- 排列组合之排列问题的算法实现
- 内部排序算法之二【改进的冒泡算法,鸡尾酒算法】
- 操作系统算法 之 改进的Clock算法
- 排列组合的递归算法
- 排列组合的算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 高效率的排列组合算法
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState
- nodejs(npm)——创建全局链接
- 分页
- UITableView使用详解
- Android ListView 分类显示(二)多布局显示
- 排列组合算法之二: 01转换法_java改变后的c++改进版
- 面试笔记整理
- AJAX jsonp 跨域请求code
- [倚天屠龙记] vim 查找与替换(简单查找)
- repeater分页的实现
- socket错误
- perl常用命令
- NetBPM工作流的架构设计及实现浅析
- cocos 使用Luajit将Lua脚本编译为bytecode,从而实现加密