|
- #include <iostream>
- #include <vector>
-
- using namespace std;
-
- //求长度为number的组合
- /*
- 参数:
- v:基础元素集合
- cur采用v:当前递归过程中的中间组合变量
- cur采用index:当前递归处理到v中第几个元素了
- number:要求的组合的长度值
- result:用于保存组合结果
- */
- template<class T>
- void Combination采用n(const vector<T>& v, vector<T>& cur采用v, int cur采用index, int number, vector<vector<T>>& result) {
-
- if (number == 0) {
- result.push采用back(cur采用v);
- return;
- }
-
- if (cur采用index >= v.size()) {
- return;
- }
-
- cur采用v.push采用back(v[cur采用index]);
- Combination采用n(v, cur采用v, cur采用index + 1, number - 1, result);
- cur采用v.pop采用back();
- Combination采用n(v, cur采用v, cur采用index + 1, number, result);
- }
-
- //求全组合,对于长度为n的v,组合的种类数一共有2^n-1种
- /*
- 参数:
- v是基础元素集合
- result用于保存所有组合结果
- */
- template<class T>
- void Combination(const vector<T>& v, const int &num,vector<vector<T>>& result)
- {
- if (v.empty()) {
- return;
- }
- else if (v.size() == 1) {
- result.push采用back(v);
- return;
- }
-
- //求不同长度的组合
- vector<int> temp采用v;
- for (int i = num; i <= v.size(); ++i) {
- Combination采用n(v, temp采用v, 0, i, result);
- }
-
- }
-
- int main(int argc, char* argv[])
- {
- vector<int> v{ 1,2,3 ,4,5,6,7,8,9,10};
- vector<vector<int>> result;
- Combination(v, 5,result);
- vector<int> v2;
-
-
- for (auto& a : result) {
- for (auto& b : a) {
- cout << b<<" ";
- }
- cout << endl;
- }
- cout << result.size() << endl;
- return 0;
- }
复制代码 |
|