J'essaie juste d'apprendre la permutation en utilisant le retour arrière. J'ai écrit le code suivant mais il s'arrête après la première sortie.Permutation Python en utilisant le retour arrière
def permutations(str_in, soFar):
if len(str_in) != 0:
for c in str_in:
soFar.append(c)
temp_str = str_in
temp_str.remove(c)
print temp_str, soFar
permutations(temp_str, soFar)
else:
print soFar
inp = "ABCD"
str_in = list(inp)
permutations(str_in, [])
C'est la sortie que je reçois pour cela:
['B', 'C', 'D'] ['A']
['C', 'D'] ['A', 'B']
['D'] ['A', 'B', 'C']
[] ['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
Je suis sûr que ce soit quelque chose de simple, mais je ne suis pas en mesure de comprendre quelle erreur que je fais ici.
Quelle est votre sortie attendue? – Miket25
Il y a 2 problèmes, avec la même cause racine ici. - 'temp_str' est conçu pour être un _copy_ de la liste d'entrée, mais il prend juste la référence, donc il épuise rapidement les entrées et les récursions -' soFar' devrait être réinitialisé après impression, ou le résultat est incorrect (contient également les résultats précédents). Je ne publie pas de solution car cela génère toujours des doublons. Pas sûr que ce soit l'algorithme approprié, mais c'est mieux. –
J'essaie de générer toutes les permutations possibles telles que [A, B, C, D] puis [A, B, D, C] et ainsi de suite. – akhilc