ハノイの塔7(クラスBouの改良-tmpも書く)

クラスBouの改良

枚数を引数で指示する

tmpも書く

数を数える

ファイル名 Hanoi7.java

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 + "回");
   } 

}

ファイル名 Bou.java

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回 と表示されている。ここを移動する回数が表示されるようにするにはどうすればよいか。

もくじ

聖愛中学高等学校
http://www.seiai.ed.jp/
Last Modified