Przechodzenie przez wszystkie permutacje jedna zamiana na raz

Biorąc pod uwagę listę n różnych elementów, jak mogę przechodzić przez każdą permutację elementów zamieniających tylko jedną parę wartości na raz? (Zakładam, że jest to możliwe, na pewno tak powinno być).

To, czego szukam, to iterator, który daje indeksy następnej pary przedmiotów do wymiany, tak że jeśli iterowany n! -1 razy, przejdzie przez n! permutacje listy w pewnym porządku. Jeśli powtórzenie go jeszcze raz przywróci listę do jej początkowej kolejności, będzie to premia, ale nie jest to wymagane. Jeśli wszystkie pary obejmują pierwszy (lub ostatni) element jako jedną z par, tak aby funkcja musiała zwrócić tylko jedną wartość, to również byłaby premia.

Przykład: - dla 3 elementów można zamienić ostatni element na przemian z pierwszym i drugim elementem, aby przejść przez permutacje, mianowicie: (abc) zamiana 0-2 => (cba) 1-2 (kabina) 0-2 ( bac) 1-2 (bca) 0-2 (acb).

Będę wdrażał w C, ale prawdopodobnie rozwiążę rozwiązania w większości języków.

questionAnswers(4)

yourAnswerToTheQuestion