/* * Tower of Hanoi (uses stack) * written by Arthur Gapusan (ajgapusan@hotmail.com) * http://www.planet-java.biz.ly * */ class Stack { int stck[]; int tos; Stack(int size) { stck = new int[size]; tos = - 1; } void push(int item) { if (tos==stck.length-1); else stck[++tos] = item; } int pop() { if (tos < 0) return 0; else return stck[tos--]; } } class Now { Stack stack1; Stack stack2; Stack stack3; Now(int i) { stack1 = new Stack(i); stack2 = new Stack(i); stack3 = new Stack(i); for (int j=i;j>0;j--) stack1.push(j); } void move(int n, int src, int aux, int dst) { if (n==1) { int item = store(src, dst); System.out.println("Move ring #" + item + " from Tower " + src + " to " + dst); } else if (n>1) { move(n-1, src, dst, aux); int item = store(src, dst); System.out.println("Move ring #" + item + " from Tower " + src + " to " + dst); move(n-1, aux, src, dst); } } int store(int s1, int s3) { int ring = 0; if (s1 == 1) ring = stack1.pop(); if (s1 == 2) ring = stack2.pop(); if (s1 == 3) ring = stack3.pop(); if (s3 == 1) stack1.push(ring); if (s3 == 2) stack2.push(ring); if (s3 == 3) stack3.push(ring); return ring; } } class tohame2 { public static void main(String args[]) { int i = Integer.parseInt(args[0]); Now m = new Now(i); m.move(i, 1, 2, 3); } }