Прохождение всех перестановок по одному свопу за раз

Учитывая список из n отдельных элементов, как я могу пройти через каждую перестановку элементов, меняя только одну пару значений за раз? (Я предполагаю, что это возможно, это, безусловно, кажется, что так и должно быть.)

Что я'm ищет итератор, который выдает индексы следующей пары элементов, которые нужно поменять местами, так что при повторении n! -1 раз он будет проходить через n! Перестановки списка в некотором порядке. Если повторить его еще раз, список вернется к начальному порядку, что будет бонусом, но это не так.т требование. Если все пары включают первый (или последний) элемент в качестве одной из пар, так что функция должна возвращать только одно значение, это также будет бонусом.

Пример: - для 3 элементов вы можете поменять местами последний элемент поочередно с первым и вторым элементами для циклического перестановки, а именно: (a b c) swap 0-2 => (c b a) 1-2 (c a b) 0-2 (b a c) 1-2 (b c a) 0-2 (a c b) .I '

Я буду реализовывать в C, но, вероятно, смогу найти решения на большинстве языков.

Ответы на вопрос(4)

Ваш ответ на вопрос