Türme von Hanoi
Verfasst: Donnerstag 9. Juni 2016, 18:08
Liebe Foren-Miglieder,
ich stehe gerade vor einer für mich unlösbaren Aufgabe.
Das nachfolgende Programm soll (bzw. es macht es auch) belieb viele Scheiben vom Startturm zum Zielturm unter Verwendung eines Hilfsturmes (also ingesamt 3 Türme) transportieren. Das klappt auch alles gut.
[codebox=python file=Unbenannt.txt]def hanoi(n, start, hilfsplatz, ziel):
print (start, hilfsplatz, ziel)
print(start[0],"start0")
if n > 0:
hanoi(n - 1, start, ziel, hilfsplatz)
if start[0]:
disk = start[0].pop()
print ("moving " + str(disk) + " from " + start[1] + " to " + ziel[1])
ziel[0].append(disk)
hanoi(n - 1, hilfsplatz, start, ziel)
def anlegen_source(n):
start=[]
for i in range(1,n+1,1):
start.append(i)
start.reverse()
return start
def main():
anz=int(input("Wie viele Zahlen?"))
start = (anlegen_source(anz), "start")
ziel = ([], "ziel")
hilfsplatz = ([], "hilfsplatz")
hanoi(anz, start, hilfsplatz, ziel)
print (start, hilfsplatz, ziel)
main()
[/code]
Nun wollte ich gerne ein Programm schreiben welches 4 Türme (also 2 Hilfstürme) benutzt. Ich habe auch schon eine Variante, welche funktioniert. Ich möchte diese aber gerne auf das selbe Verhalten (also mittels Array) bringen wie das obere Programm. Vielleicht kann mir da jemand helfen.
[codebox=python file=Unbenannt.txt]import math
def hanoi_4towers(n,start,ziel,hilfsplatz1,hilfsplatz2):
if(n>1):
k=int(-0.5+math.sqrt(0.25+2*n))
hanoi_4towers(n-k,start,hilfsplatz1,ziel,hilfsplatz2)
hanoi_3towers(n-k+1,n,start,ziel,hilfsplatz2)
hanoi_4towers(n-k,hilfsplatz1,ziel,start,hilfsplatz2)
else:
print("Setze Scheibe",n,"von",start,"nach",ziel)
def hanoi_3towers(n1,n2,start,ziel,hilfsplatz):
if(n2-n1>0):
hanoi_3towers(n1, n2 - 1, start, hilfsplatz, ziel)
print("Setze Scheibe",n2,"von",start,"nach",ziel)
hanoi_3towers(n1,n2-1,hilfsplatz,ziel,start)
else:
print("Setze Scheibe", n2, "von", start, "nach", ziel)
[/code]
Bitte helft mir! Danke schonmal!
ich stehe gerade vor einer für mich unlösbaren Aufgabe.
Das nachfolgende Programm soll (bzw. es macht es auch) belieb viele Scheiben vom Startturm zum Zielturm unter Verwendung eines Hilfsturmes (also ingesamt 3 Türme) transportieren. Das klappt auch alles gut.
[codebox=python file=Unbenannt.txt]def hanoi(n, start, hilfsplatz, ziel):
print (start, hilfsplatz, ziel)
print(start[0],"start0")
if n > 0:
hanoi(n - 1, start, ziel, hilfsplatz)
if start[0]:
disk = start[0].pop()
print ("moving " + str(disk) + " from " + start[1] + " to " + ziel[1])
ziel[0].append(disk)
hanoi(n - 1, hilfsplatz, start, ziel)
def anlegen_source(n):
start=[]
for i in range(1,n+1,1):
start.append(i)
start.reverse()
return start
def main():
anz=int(input("Wie viele Zahlen?"))
start = (anlegen_source(anz), "start")
ziel = ([], "ziel")
hilfsplatz = ([], "hilfsplatz")
hanoi(anz, start, hilfsplatz, ziel)
print (start, hilfsplatz, ziel)
main()
[/code]
Nun wollte ich gerne ein Programm schreiben welches 4 Türme (also 2 Hilfstürme) benutzt. Ich habe auch schon eine Variante, welche funktioniert. Ich möchte diese aber gerne auf das selbe Verhalten (also mittels Array) bringen wie das obere Programm. Vielleicht kann mir da jemand helfen.
[codebox=python file=Unbenannt.txt]import math
def hanoi_4towers(n,start,ziel,hilfsplatz1,hilfsplatz2):
if(n>1):
k=int(-0.5+math.sqrt(0.25+2*n))
hanoi_4towers(n-k,start,hilfsplatz1,ziel,hilfsplatz2)
hanoi_3towers(n-k+1,n,start,ziel,hilfsplatz2)
hanoi_4towers(n-k,hilfsplatz1,ziel,start,hilfsplatz2)
else:
print("Setze Scheibe",n,"von",start,"nach",ziel)
def hanoi_3towers(n1,n2,start,ziel,hilfsplatz):
if(n2-n1>0):
hanoi_3towers(n1, n2 - 1, start, hilfsplatz, ziel)
print("Setze Scheibe",n2,"von",start,"nach",ziel)
hanoi_3towers(n1,n2-1,hilfsplatz,ziel,start)
else:
print("Setze Scheibe", n2, "von", start, "nach", ziel)
[/code]
Bitte helft mir! Danke schonmal!