import java.util.*; public class Hanoi7 { long ct = 0; Bou[] bou = new Bou[3]; public void idou(int n,Bou src,Bou dst,Bou tmp){ if (n > 0){ idou(n-1,src,tmp,dst); dst.addDisk(src.rmDisk()); //dst.pile.add(src.pile.removeLast()); for(Bou b: bou) System.out.println ( b ); System.out.println (); idou(n-1,tmp,dst,src); } } public Hanoi7(int maisuu){ bou[0] = new Bou('A',maisuu); bou[1] = new Bou('B'); bou[2] = new Bou('C'); for(Bou b: bou) System.out.println ( b ); System.out.println (); idou(maisuu,bou[0],bou[2],bou[1]); } public static void main( String[] args ) { int n = Integer.parseInt(args[0]); Hanoi7 hanoi = new Hanoi7(n); System.out.println(hanoi.ct + "回"); } }
import java.util.*; public class Bou { char name; LinkedList<Integer> pile = new LinkedList<Integer>(); public Bou(char nam,int maisuu) { name = nam; while ( maisuu >0 ){ pile.add(maisuu); maisuu--; } } public Bou(char nam) { name = nam; pile.clear(); } public String toString(){ String x = name + ":"; for ( int p : pile){ x= x + p + " "; } return x; } public int rmDisk(){ int diskn = pile.removeLast(); return diskn; } public void addDisk(int diskn){ pile.add(diskn); } }
実行結果はこうなります
A:3 2 1 B: C: A:3 2 B: C:1 A:3 B:2 C:1 A:3 B:2 1 C: A: B:2 1 C:3 A:1 B:2 C:3 A:1 B: C:3 2 A: B: C:3 2 1