考えられる答えを 1 つだけ書きます。これはあまり効率的ではありませんが、使用できるはずです。
(あなたの例では)すべての5要素グループが必要であると仮定していることに注意してください。最初の要素はv1から、2番目の要素はv2から、3番目は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);
前に言ったように、はるかに効率的で洗練された方法があり、上記のコードはコンパイルさえできないかもしれません (私はここに書きました)。