我有一个包含一系列数字{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
为什么功能不能打印出所有可能的组合?
此外,这是我想要使用的 - 包含数字的双端队列和包含每个组合的向量。
答案 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