汉诺塔

package com.someusefuldesign.demo;
/*假设有A B C三个柱子移动的顺序为:
 * */
public class Hanoi {  
   
    static int count = 0;  
    public void hanoi(int n,String from,String depend,String to ){  
    	 //这里的n是指每个柱子上盘子的编号,从上到下为1-n
        if(n == 1){  
            move(from,to);  
        }else{  
            /**先把初始柱子的前n-1个盘子借助目标柱子移动到辅助柱子上**/  
            hanoi(n-1,from,to,depend);//把初始柱子上n-1个放到辅助柱子上
            /**然后把初始柱子上最后一个最大的盘,放到目标柱子上*/  
            move(from,to);//这里只是打印出来信息
            /**然后借助初始柱子(把初始柱子当成辅助柱子),把之前辅助柱子上的n-1个盘,放到目标柱子上*/  
            hanoi(n-1,depend,from,to);  //再把辅助上的放到目标柱子上
            /**由于是递归,反复调用,知道n=1,到递归出口*/  
        }  
    }  
      
    public void move(String from,String to){  
        System.out.println("from " + from + " to " + to);  
        count++;  
    }  
  
    public static void main(String[] args) {  
        /**定义ABC三个柱子,A为初始柱子,B为辅助柱子,C为目标柱子*/  
        Hanoi hanoi=new Hanoi();
        hanoi.hanoi(3, "A", "B", "C");  
        System.out.println("一共移动了"+count+"步");  
    }  
  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值