Мне нужно создать перестановки из нескольких диапазонов чисел в массиве.Перестановки множества диапазонов чисел
using namespace std;
int generatePermutations(vector<int> &myVector, vector<vector<int> > &swappable) {
int i = 0, s = 0;
for (s = 0; s < swappable.size(); s++) {
do {
for (i = 0; i < myVector.size(); i++) {
printf("%i ", myVector[i]);
}
printf("\n");
swappable.pop_back();
generatePermutations(myVector, swappable);
} while (next_permutation(myVector.begin()+swappable[s][0],
myVector.begin()+swappable[s][1]));
}
}
int main() {
vector<int> myArray;
myArray.resize(6);
myArray[0] = 0;
myArray[1] = 1;
myArray[2] = 2;
myArray[3] = 3;
myArray[4] = 4;
myArray[5] = 5;
// Swappable positions (0 - first, 1 - last)
vector<vector<int> > swappable;
swappable.resize(2);
swappable[0].resize(2);
swappable[0][0] = 1; swappable[0][1] = 3;
swappable[1].resize(2);
swappable[1][0] = 4; swappable[1][1] = 6;
generatePermutations(myArray, swappable);
return 0;
}
В приведенном выше примере должен создавать что-то вроде этого:
0 1 2 3 4 5
0 2 1 3 4 5
0 1 2 3 5 4
0 2 1 3 5 4
Но он генерирует это:
0 1 2 3 4 5
0 1 2 3 4 5
Что такое 'swappable' для? Почему в вашем коде нет комментариев? –
Комментарий добавлен. swappable предназначен для хранения первой и последней позиций, между которыми мне нужно генерировать перестановки. –
Хорошо. Вы пробовали переходить через ваш код в отладчике, чтобы увидеть * почему * он всегда дает тот же результат? –