使用deque和recursion C ++创建所有可能的组合

时间:2016-04-13 04:26:30

标签: c++ recursion

我有一个包含一系列数字{0, 1, 2, 3, 4, 5, 6}的双端队列,我正在尝试使用递归创建这些数字的所有可能组合。

这是我目前的代码

void combination(vector<node> &comb, deque<node> &numbers) {

    if (numbers.empty()) {
        for (unsigned int i = 0; i < comb.size(); i++) {
            cout << comb[i].id << " ";
        }
        cout << "\n";
        return;
    }

    comb.push_back(numbers.front());
    numbers.pop_front();
    combination(comb, numbers);
    comb.pop_back();
    combination(comb, numbers);
}

我已经在纸上完成了这个并且它有意义但是当我运行它时这是输出:

0 1 2 3 4 5 6
0 1 2 3 4 5
0 1 2 3 4
0 1 2 3
0 1 2
0 1
0

为什么功能不能打印出所有可能的组合?

此外,这是我想要使用的 - 包含数字的双端队列和包含每个组合的向量。

1 个答案:

答案 0 :(得分:2)

您正在使用Pass by reference,我做了一些小修改并且可以正常使用

代码:

#include <bits/stdc++.h>
using namespace std;

void combination(vector<int> comb, deque<int> numbers) {

    if (numbers.empty()) {
        for (unsigned int i = 0; i < comb.size(); i++) {
            cout << comb[i] << " ";
        }
        cout << "\n";
        return;
    }

    comb.push_back(numbers.front());
    numbers.pop_front();
    combination(comb, numbers);
    comb.pop_back();
    combination(comb, numbers);
}

int main() {
    // your code goes here
    vector<int> comb;
    deque<int> numbers;
    for(int i = 0;i < 7;i++) numbers.push_back(i);
    combination(comb, numbers);
    return 0;
}

链接到ideone上的解决方案:http://ideone.com/vgukF3