全排列C++里面STL自带函数,但是组合貌似没有,以下代码实现的所有组合,并且打印出来
#include <iostream>
#include <vector>
using namespace std;
vector<int> people;
vector<int> combination;
vector<vector<int>> result;
void pretty_print(const vector<int>& v) {
static int count = 0;
cout << "combination no " << (++count) << ": [ ";
for (int i = 0; i < v.size(); ++i) { cout << v[i] << " "; }
cout << "] " << endl;
}
void go(int offset, int k) {
if (k == 0) {
result.push_back(combination);
return;
}
//每次递归结束后,要考虑i是不是i <= people.size() - k,如果没有继续i++,如果i大于这个,返回上一次递归
for (int i = offset; i <= people.size() - k; ++i) {
combination.push_back(people[i]);
go(i+1, k-1);
combination.pop_back();//删除combination最后一个元素
}
}
int main() {
int n = 12, k = 4;
for (int i = 0; i < n; ++i) { people.push_back(i+1); }
go(0, k);
return 0;
}