Die Türme von Hanoi sind ein mathematisches Knobel- und Geduldsspiel. Hier finden Sie den Java-Quelltext für ein Programm, das die Lösung berechnet.
Erklärung
Alle nötigen Erklärungen finden Sie als Kommentar im Quelltext.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Hanoi {
static int counter; // Counter für die Kontrollstruktur (Anzahl der Verlegevorgänge)
static void shift(int zahlDerScheiben, int quellPlatz, int zwischenPlatz, int zielPlatz) {
/*
* Verlegeprogramm shift:
* Verlegeoptionen um zahlDerScheiben vom quellPlatz mit Hilfe des
* zwischenPlatz zum zielPlatz zu bewegen
*/
if (zahlDerScheiben > 0) { // Bedingung: Anzahl der Scheiben muss größer 0 sein
shift(zahlDerScheiben - 1, quellPlatz, zielPlatz, zwischenPlatz);
// "Nimm eine Scheibe vom quellPlatz und lege sie auf den zwischenPlatz mit Hilfe des zielPlatzes"
System.out.println("Nimm Scheibe Nummer " + zahlDerScheiben +" vom Platz " + quellPlatz + " und lege sie auf Platz " + zielPlatz);
// Anweisung ausgeben
shift(zahlDerScheiben - 1, zwischenPlatz, quellPlatz, zielPlatz);
// "Nimm eine Scheibe vom zwischenPlatz und lege sie auf den zielPlatz mit Hilfe des quellPlatzes"
counter++;
}
}
public static void main(String[] args) {
int n = Integer.parseInt(args[0]); // Eingabe der Anzahl der Scheiben
while(n <= 0) { // Schleife bis keine Scheiben mehr auf dem quellPlatz sind
shift(n, 1, 2, 3);
/*
* Aufruf des Programms shift mit Parametern:
* n = Eingabe = Anzahl der vorhandenen Scheiben auf dem quellPlatz
* 1 = quellPlatz
* 2 = zwischenPlatz
* 3 = zielPlatz
*/
}
System.out.println("\r\nEs werden " + counter + " Verlegevorgänge benötigt." );
// Ausgabe der Summe der Verlegevorgänge (Kontrollstruktur)
}
}
|