我将只写出一个可能的答案,这不是非常有效,但应该是可用的。
请注意,我假设(在您的示例中)您想要所有 5 元素组,第一个元素取自 v1,第二个元素取自 v2,第三个元素取自 v3,等等。
void gen_all (
vector<vector<int> > & output_perms,
vector<vector<int> > const & input,
vector<int> & cur_perm,
unsigned cur_row = 0
)
{
if (cur_row >= input.size())
{
// This is where you have found a new permutation.
// Do whatever you want with it.
output_perms.push_back (cur_perm);
return;
}
for (unsigned i = 0; i < input[cur_row].size(); ++i)
{
cur_perm.push_back (input[cur_row][i]);
gen_all (output_perms, input, cur_perm, cur_row + 1);
cur_perm.pop_back ();
}
}
像这样调用上面的函数:(假设v
保存你的原始集合。)
vector<vector<int> > output;
vector<int> temp;
gen_all (output, v, temp);
正如我之前所说,还有更高效和优雅的方法,上面的代码甚至可能无法编译(我只是在这里写的。)