Hanoi算法

经典算法忘得太快。。。。重温一遍

 public class Hanoi {
int i=1;
   public void move(int n,char from,char to){
  System.out.println("第"+i+"步"+"---------"+"第"+n+"个盘子从"+from+"上移到"+to+"上");
i++;
   }
   public void hanoi(int n,char a,char b,char c){//a为原塔,要移到b塔上,c为辅助塔
  if(n==1) move(1,a,b);
  else{
  hanoi(n-1,a,c,b);//将a塔上n-1个塔移到c上,借助b塔、
  System.out.println("####");
  move(n,a,b);//将最后那个盘子n移到b上
  hanoi(n-1,c,b,a);//将c塔上n-1个-盘移到b上,将c塔作为a塔使用,即n-1个盘在a塔上,重复hanoi方法
  System.out.println("****");
  }
  }
   
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
       Hanoi hanoi=new Hanoi();
       hanoi.hanoi(5,'A','B','C');
}


}

第1步---------第1个盘子从A上移到B上
####
第2步---------第2个盘子从A上移到C上
第3步---------第1个盘子从B上移到C上
****
####
第4步---------第3个盘子从A上移到B上
第5步---------第1个盘子从C上移到A上
####
第6步---------第2个盘子从C上移到B上
第7步---------第1个盘子从A上移到B上
****
****
####
第8步---------第4个盘子从A上移到C上
第9步---------第1个盘子从B上移到C上
####
第10步---------第2个盘子从B上移到A上
第11步---------第1个盘子从C上移到A上
****
####
第12步---------第3个盘子从B上移到C上
第13步---------第1个盘子从A上移到B上
####
第14步---------第2个盘子从A上移到C上
第15步---------第1个盘子从B上移到C上
****
****
****
####
第16步---------第5个盘子从A上移到B上
第17步---------第1个盘子从C上移到A上
####
第18步---------第2个盘子从C上移到B上
第19步---------第1个盘子从A上移到B上
****
####
第20步---------第3个盘子从C上移到A上
第21步---------第1个盘子从B上移到C上
####
第22步---------第2个盘子从B上移到A上
第23步---------第1个盘子从C上移到A上
****
****
####
第24步---------第4个盘子从C上移到B上
第25步---------第1个盘子从A上移到B上
####
第26步---------第2个盘子从A上移到C上
第27步---------第1个盘子从B上移到C上
****
####
第28步---------第3个盘子从A上移到B上
第29步---------第1个盘子从C上移到A上
####
第30步---------第2个盘子从C上移到B上
第31步---------第1个盘子从A上移到B上
****
****
****
****


你可能感兴趣的:(Algorithm)