以下にいくつかの方法を示します。
- 再帰を使用した方法: 再帰を使用して繰り返しを伴う順列を生成する方法は次のようになります。
#include <iostream>
#include <vector>
using namespace std;
void generatePermutations(vector<int>& elements, vector<int>& permutation, int length) {
if (length == permutation.size()) {
for (int num : permutation) {
cout << num << " ";
}
cout << endl;
return;
}
for (int i = 0; i < elements.size(); i++) {
permutation.push_back(elements[i]);
generatePermutations(elements, permutation, length);
permutation.pop_back();
}
}
int main() {
vector<int> elements = {1, 2, 3};
int length = 3;
vector<int> permutation;
generatePermutations(elements, permutation, length);
return 0;
}
このコードは、elements
ベクターから長さlength
の繰り返しを伴う順列を生成します。再帰関数generatePermutations
は、順列の要素を再帰的に組み合わせ、生成します。
- ライブラリを使用した方法:
C++のSTL(Standard Template Library)には、順列を生成するためのアルゴリズムが用意されています。
next_permutation
関数を使用することで、簡単に繰り返しを伴う順列を生成することができます。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> elements = {1, 2, 3};
sort(elements.begin(), elements.end());
do {
for (int num : elements) {
cout << num << " ";
}
cout << endl;
} while (next_permutation(elements.begin(), elements.end()));
return 0;
}
このコードでは、next_permutation
関数を使用して順列を生成します。elements
ベクターを事前に昇順にソートしてから、do-while
ループを使用して順列を生成し、出力します。
これらの方法を使って繰り返しを伴う順列を生成することができます。適宜、要素の集合や長さを変更して試してみてください。