分治思想解决汉诺塔的问题

/**
 * 1,关于分治算法:
 * 2,使用分治思想解决汉诺塔的问题
 * 3,解决汉诺塔问题的思路:无论有多少个盘,都可以分成两部分,最下面的1个盘和该盘上面的所有盘(假设这些盘都在A上)。
 *   step1:将最下面的1个盘上面的所有盘移动到B上。
 *   step2:将最下面的1个盘移动到C上。
 *   step3:将B上面的所有盘移动到C上(如何将B上面的盘移动到C上,重复上述步骤即可,不同的仅仅是柱子)
 */
public class Hanoitower {
    public static void main(String[] args) {
        hanoitower(4,'A','B','C');
    }

    /**
     *
     * @param num 盘的数量
     * @param a  开始的柱子
     * @param b  移动时需要借助的柱子
     * @param c  最后放置的柱子
     */
    static  void hanoitower(int num, char a,char b,char c){

        if(num == 1){//如果只有一个盘,那么直接从A移动到C
            System.out.println("将第1个盘从:"+a + "->"+ c);
        }else{ //如果有多个盘
            //将最下面的盘的上面的所有盘从A移动到B,中间需要借助C
            hanoitower(num-1,a,c,b);
            //将最下面的盘直接从A移动到C
            System.out.println("将第"+num+"个盘从:"+a + "->"+ c);
            //将B上面的所有盘从B移动到C,中间需要借助A。移动过程仍然是先移动最下面的盘上面的所有盘,再移动最下面的盘。
            hanoitower(num-1,b,a,c);


        }
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值