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上
****
****
****
****


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值