Türme Hanoi grafisch

Das fertige Programm So sieht das fertige Programm aus.

Die grafische Implementierung der Türme von Hanoi setzt das rekursive Prinzip der Türme fort. Dabei wird folgendes bekanntes Prinzip angewandt:

Pseudocode:

function loese(anzScheiben, von, zu, speicher)
    wenn anzScheiben < 2
        bewegeScheibe(von, zu)
    sonst
        loese(anzScheiben-1, von, speicher, zu)
        bewegeScheibe(von, zu)
        loese(speicher, zu, von)    

Die Basis überprüft, ob nur noch eine Scheibe vorhanden ist, die dann einfach auf den Zielstapel gesetzt werden kann. Sollte das nicht der Fall sein, so werden erst alle Scheiben, bis auf die unterste Scheibe, auf den Speicherstapel (Anfangs der Stapel in der Mitte) verschoben. Dann die unterste Scheibe auf den Zielstapel gesetzt und danach die Scheiben von dem Zwischenspeicher auf den Zielstapel gesetzt. Dieses Prinzip wird dann für eine immer geringere Anzahl von Scheiben angewandt, bis nur noch eine Scheibe betrachtet wird. Danach kann man wieder für immer mehr Scheiben diese von dem Speicherstapel auf den Zielstapel verschieben.

 tower of hanoi GIF Quelle: https://de.wikipedia.org/wiki/Datei:Tower_of_Hanoi.gif

Implementierung:

private void solve(int disks, int from, int to, int spare) {
    if(disks < 2){
        /*
        Rekursionsbasis: sollte nur noch eine Scheibe vorhanden sein, 
        bewege sie auf den Zielstapel
        */
        moveOne(from, to);
    }else{
        //Rekursionsschritt
        solve(disks-1, from, spare,to);  //Fuer alle Scheiben, bis auf die unterste loesen
        moveOne(from,to);                //Unterste auf Zielstapel legen
        solve(disks-1, spare,to,from);   //Fuer den Rest von neuem loesen.
    }
    /**Die Methode moveOne(int fromStack, int toStack) bewegt eine Scheibe vom Stapel
    * mit der Nummer fromStack zum Stapel mit der Nummer toStack
    **/
}