クラスBouの改良
枚数を引数で指示する
tmpも書く
数を数える
import java.util.*; public class Hanoi7 { long ct; Bou[] bou = new Bou[3]; public Hanoi7(int maisuu){ ct = 0; 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 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 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); } }
実行結果はこうなります
$ java Hanoi7 3
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
0回
あと一行足りないので、0回 と表示されている。ここを移動する回数が表示されるようにするにはどうすればよいか。