Skip to content

Commit 4162c83

Browse files
committed
hanoi tower game
1 parent 19789d9 commit 4162c83

1 file changed

Lines changed: 71 additions & 0 deletions

File tree

PuzzleCoding/src/HanoiTower.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import java.util.Stack;
2+
3+
/**
4+
* The discs differ in size and are initially arranged on one of the poles,
5+
* in order from largest (disc n) at the bottom to smallest (disc 1) at the top.
6+
* The task is to move the stack of discs to another pole, while obeying the following rules:
7+
* <p/>
8+
* Move only one disc at a time.
9+
* Never place a disc on a smaller one.
10+
* <p/>
11+
* Move the top N - 1 disks from Src to Aux (using Dst as an intermediary peg)
12+
* Move the bottom disk from Src to Dst
13+
* Move N - 1 disks from Aux to Dst (using Src as an intermediary peg)
14+
*/
15+
public class HanoiTower {
16+
public Stack<Integer> disks;
17+
public int index;
18+
19+
public HanoiTower(int i) {
20+
index = i;
21+
disks = new Stack<Integer>();
22+
23+
}
24+
25+
public void addDisk(int disk) {
26+
if (!disks.isEmpty()) {
27+
if (disks.peek() <= disk) {
28+
System.out.println("error: " + disk + " larger than " + disks.peek());
29+
}
30+
}
31+
disks.push(disk);
32+
}
33+
34+
public void printTower() {
35+
System.out.println("tower " + index + " : " + disks.toString());
36+
}
37+
38+
public void moveTopDisk(HanoiTower tower) {
39+
if (!disks.isEmpty()) {
40+
Integer disk = disks.pop();
41+
tower.addDisk(disk);
42+
System.out.println("move disk " + disk + " from tower " + this.index + " to tower " + tower.index);
43+
} else {
44+
System.out.println("tower " + index + " is empty.");
45+
}
46+
}
47+
48+
public void moveDisks(int n, HanoiTower dest, HanoiTower aux) {
49+
if (n > 0) {
50+
moveDisks(n - 1, aux, dest);
51+
moveTopDisk(dest);
52+
aux.moveDisks(n - 1, dest, this);
53+
}
54+
}
55+
56+
public static void main(String[] args) {
57+
int N = 4;
58+
HanoiTower[] towers = new HanoiTower[N];
59+
for (int i = 1; i <= N; i++) {
60+
towers[i - 1] = new HanoiTower(i);
61+
}
62+
for (int i = N; i > 0; i--) {
63+
towers[0].addDisk(i);
64+
}
65+
towers[0].printTower();
66+
towers[0].moveDisks(N, towers[2], towers[1]);
67+
towers[2].printTower();
68+
69+
70+
}
71+
}

0 commit comments

Comments
 (0)