【发布时间】:2016-04-13 04:26:29
【问题描述】:
我有一个包含一系列数字 {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
为什么函数没有打印出所有可能的组合?
另外,这就是我想要使用的 - 一个包含数字的双端队列和一个包含每个组合的向量。
【问题讨论】:
-
我认为这是为了学校练习或其他学习体验?否则你应该改用
std::next_permutation。 -
我正在使用它来实现一个分支定界方法来解决问题。所以,我不能使用
next_permutation -
另外,您在此处发布的代码无法编译。我假设函数应该被称为
permute而不是combination和combination.push_back(...)应该是comb.push_back(...)? -
@CantrianBear 不是一个有用的答案。如果是这样的话,这个网站就没有意义了。我显然不知道为什么它没有达到我的预期,这是最后的手段。
-
您通过引用传递
numbers。在到达的第一片叶子上,它永远为空()。