私はc++に2つのnを持っており、最初のベクトルの順列ごとに、他のすべてのベクトルのすべての順列を持つように、これらのベクトルの数値の順列を生成したいと考えています。番号29の2つのベクトルがあり、もう1つのベクトルは5 6になるとすると、結果は次のようになります。
- 2 9 5 6
- 2 9 6 5
- 9 2 5 6
- 9 2 6 5
つまり、取得した順列の総数は、合計perms =(1番目のベクトルの順列の数×2番目のベクトルの順列の数×3番目のベクトルの順列の数など)になります。
私は以下のコードを書きました、そして私は再帰スタックに打たれました...それはそれぞれがそれぞれ2のサイズを持つ2つのベクトルの場合に実際に6回印刷しています。
mySwap(int *x, int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
}
2つのint要素を交換します
void myPerm(vector<vector<int>> myItems, int start, int end,int vectorIndex){
int j;
if(start == end){
for(int k = vectorIndex +1; k < items.size(); ++k){
myPerm(myItems, 0, myItems[k].size()-1,k);
}
for(int z = 0; z < myItems.size(); ++z){
for(int l = 0; l < myItems[z].size(); ++z){
std::cout << myItems[z][l];
}
}
}
else{
for(int j = start; j <= end; j++){
mySwap(&myItems[vectorIndex][start],&myItems[vectorIndex][j]);
myPerm(myItems,start + 1, end,vectorIndex);
mySwap(&myItems[vectorIndex][start],&myItems[vectorIndex][j]);
}
}
}
順列を再帰的に生成する上記のコード...
int main(){
vector<vector<int>> myItems;
int k = 0;
for(int i =0; i < 2; ++i){
myItems.push_back(vector<int>);
}
for(int j =0; j < 2; ++j){
myItems[i].push_back(k++);
}
myPerm(items,0,items[0].size()-1,0);
return;
}
私の主な機能。
上記のコードは元々4倍であるはずの6つの順列を出力するため、一般的なケースについてヒントを与えるか、これを解決してください。
ありがとう