用C++实现组合

来源:互联网 发布:linux程序设计第四版 编辑:程序博客网 时间:2024/06/05 02:42

全排列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;}
1 0
原创粉丝点击