Я прочитал другие ответы, и я считаю, что они лучше, чем мои, для вашей конкретной проблемы.Однако я отвечаю на случай, если кому-то понадобится обобщенное решение вашей проблемы.
Недавно мне нужно было сгенерировать все перестановки из 3-х отдельных непрерывных диапазонов [first1, last1) + [first2, last2) + [first3,last3).Это соответствует вашему случаю, когда все три диапазона имеют длину 1 и разделены только одним элементом.В моем случае единственным ограничением является то, что расстояние (first3, last3)> = distance (first1, last1) + distance (first2, last2) (которое, я уверен, может быть уменьшено с большими вычислительными затратами).
Моим приложением было генерировать каждую уникальную перестановку, но не ее обратную.Код здесь:
http://howardhinnant.github.io/combinations.html
А конкретная применимая функция - combin_discontinuous3 (которая создает комбинации), и ее использование в reversible_permutation :: operator (), которая создает перестановки.
Это не готовое комплексное решение вашей проблемы.Но это набор инструментов, который можно использовать для решения обобщений вашей проблемы.Опять же, для вашей точной простой проблемы я рекомендую более простые решения, которые уже предлагали другие.