py
def hanoinoto(hanoi, n):
"""Anzeige des Turms in Hanoi"""
print('------', n)
for stack in hanoi:
print('#', ''.join(stack))
N = 3 #Anzahl der Festplatten
#Zustand der Platte an drei Positionen
hanoi = [list('4321')[-N:], [], []]
hanoinoto(hanoi, 0) #Anzeige des Ausgangszustands
#Bewegen Sie alle Discs
for n in range(1, 2**N):
i = (n & (n - 1)) % 3 #Quelle verschieben (Bitoperation)
j = ((n | (n - 1)) + 1) % 3 #Ziel verschieben (Bitberechnung)
c = hanoi[i].pop() #Pop von Position i
hanoi[j].append(c) #An Position j anhängen(push)
hanoinoto(hanoi, n)
*** Ausführungsergebnis ***
------ 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