Das Problem beim Turm von Hanoi besteht in der folgende Aufgabe:
Du kannst das Spiel hier ausprobieren: https://www.mathematik.ch/spiele/hanoi_mit_grafik/
Bei genauerer Analyse des Problems, kann man erkennen, dass es rekursiver Natur ist: Beim Umsetzen des Turms mit n
Scheiben vom Platz A zum Platz B muss man immer zunächst den Turm mit n-1
Scheiben, der sich auf der größten (untersten) Scheibe befindet, auf den "Hilfsplatz" C umsetzen.
Dann kann man die größte Scheibe nach B setzen und muss anschließend nochmal den n-1
großen Turm von C nach B umsetzen.
Vollziehe den rekursiven Charakter des Problems in der Simulation nach, indem du Türme mit 1,2,3,4 Scheiben umsetzt und dir dabei klar machst, dass du jeweils auf das Verfahren des vorigen Schritts mit n-1 Scheiben zurückgreifen kannst.
Modelliere das Problem in Java. Als ADT kannst du einen Stack verwenden, den es in der Java Standardbibliothek gibt:
import java.util.Stack; [...] public class Hanoi { int numDiscs; Stack<Integer> towerA = new Stack<>(); Stack<Integer> towerB = new Stack<>(); Stack<Integer> towerC = new Stack<>(); [...] public Hanoi() { // ersten Stapel füllen } // schiebe Turm von ... nach ... public void move([...]) { } // alle drei Türme ausgeben public void printState() { }
printState()
, die den Zustand des Spiels ausgibt.move
. Überlege, welche Argumente die Methode benötigt.push
(lege ein Element auf den Stack) und pop
(entferne das oberste Element vom Stack).init()
, durch welche Zahlen du die Scheiben repräsentieren willst.moveTower()
ist der eigentliche Algorithmus, der einen beliebige Anzahl Scheiben von einem Turm zu einem anderen Turm versetzt. Überlege dir einen Basis- und einen Rekursionsfall!test()
kannst du nutzen, um deine moveTower-Methode zu testen.printState
) ist das rechte Element des Stacks das oberste!