Я так понимаю, это подкачка - это набор диапазонов, которые можно поменять местами? Таким образом, [[1, 3], [4, 6]] означает, что что-либо в [1, 3) (индексы 1 и 2) можно поменять местами в этом диапазоне, и аналогично для [4, 6)? Также верно, что диапазоны никогда не будут перекрываться?
Как это выглядит:
typedef vector<vector<int> >::const_iterator SwappableIter;
void generatePermutations(vector<int> &data,
SwappableIter begin, SwappableIter end)
{
if (begin == end) {
print(data);
}
else {
vector<int>::iterator start = data.begin() + (*begin)[0],
stop = data.begin() + (*begin)[1];
sort(start, stop);
do {
generatePermutations(data, begin + 1, end);
} while (next_permutation(start, stop));
}
}