py
def hanoinoto(hanoi, n):
"""Affichage de la tour à Hanoi"""
print('------', n)
for stack in hanoi:
print('#', ''.join(stack))
N = 3 #Nombre de disques
#État du disque à trois positions
hanoi = [list('4321')[-N:], [], []]
hanoinoto(hanoi, 0) #Affichage de l'état initial
#Déplacer tous les disques
for n in range(1, 2**N):
i = (n & (n - 1)) % 3 #Déplacer la source (opération sur les bits)
j = ((n | (n - 1)) + 1) % 3 #Déplacer la destination (calcul des bits)
c = hanoi[i].pop() #Pop de la position i
hanoi[j].append(c) #Ajouter à la position j(push)
hanoinoto(hanoi, n)
*** Résultat de l'exécution ***
------ 0 # 321 # # ------ 1 # 32 # # 1 ------ 2 # 3 # 2 # 1 ------ 3 # 3 # 21 # ------ 4 # # 21 # 3 ------ 5 # 1 # 2 # 3 ------ 6 # 1 # # 32 ------ 7 # # # 321
Recommended Posts