L’algoritmo precedente genera duplicati se ci sono elementi ripetuti nella lista originale.
La struttura dati set raccoglie i risultati eliminando le ripetizioni.
def scambia(lista, p1, p2):
temp = lista[p1]
lista[p1] = lista[p2]
lista[p2] = temp
def permuta(lista, pos, n, elenco):
if(pos == n-1):
elenco.add(lista)
else:
for k in range(pos, n):
scambia(lista, pos, k)
permuta(lista, pos+1, n, elenco)
scambia(lista, pos, k)
LISTA = [1, 2, 3, 4, 3]
ELENCO = set() # <--
permuta(LISTA, 0, len(LISTA), ELENCO)
ELENCO = list(ELENCO) # Il risultato come lista
ELENCO.sort() # <-- Facoltativo: ordinati
for x in ELENCO:
print(x)