у меня есть два n в c ++, и я хочу сгенерировать перестановку чисел в этих векторах таким образом, чтобы для каждой перестановки первого вектора у меня были все перестановки всех других векторов.Скажем, у меня есть два вектора с номером 2 9, а другой вектор будет 5 6. тогда мой результат должен быть ...
- 2 9 5 6
- 2 9 6 5
- 9 2 5 6
- 9 2 6 5
означает, что общее количество перестановок, которые я получу, составит всего перми = (# количество перестановок 1-гоvector умножить на число перестановок второго вектора (умножить на число перестановок третьего вектора и т. д.).
Я написал приведенный ниже код и поражен стеком рекурсии ... На самом деле это печать 6времена для случая 2 вектора каждый имеет размер 2 каждый.
mySwap(int *x, int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
}
меняет два элемента 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 раза.
Спасибо