Да, это возможно, и это не сложно, как только вы поймете, как работает next_permutation
.
Одним словом, существует N! перестановки из N элементов. Однако только один из них сортируется. 1 2 3 4 5 6 7
, например, является первой из 5040 перестановок. В качестве строки (лексикографически) следующая перестановка является следующей, которая сортируется непосредственно после этого: 1 2 3 4 5 7 6
. В частности, первые 5 элементов не изменяются. Переменная next изменяет 5-й элемент, потому что последние 2 элемента находятся в обратном порядке.
Итак, в вашем случае, если вы обнаружили незаконную перестановку, вам нужно будет явно вычислить следующую законную перестановку по порядку сортировки. Если 1 2
является единственным незаконным префиксом, то 1 3 2 4 5 6 7
, очевидно, является следующей допустимой перестановкой.
В целом, посмотрите на свой незаконный шаблон, определите, какие позиции у вас есть , увеличьте, потому что они нарушают ограничения и вызывают следующие допустимые значения для этих позиций (если ваш шаблон достаточно мал, это усилие). Затем заполните оставшиеся номера в отсортированном порядке.