算法:Hanoi塔问题

什么是汉诺塔

将A塔上n个金属盘片移动到C塔上,一次移动一个盘;无论何时,小盘在上,大盘在下。
在这里插入图片描述

思考

这个问题应该使用递归的方法思考,也就是说无论如何,第n个塔片最终应该放在C的最底下,所以必须保证C上没有塔片,且A上只有第n个塔片,所以第一步是把第1~(n-1)个塔片全部搬到塔B上,并且是从上到下从小到大依次排列的,先不要想怎么做。
在这里插入图片描述
这个时候我们就可以轻松的把第n个移动到塔C的最下端了。
那么接下来应该是n-1移动到塔C,也是一样的原理先把他上面那n-2个家伙挪开,挪到塔A上,这样n-1就可以去到他该去的位置了。
这时候我们发现不管多少个塔片移动到策略都是一样的:
假设我们要移动第n个塔片到目标塔
先把他上面的n-1个塔片移到辅助塔(一共三个塔,一个是目标塔,还一个塔你占着,剩下的那个就是辅助塔)上
然后把他移动到目标塔。

我们就可以利用递归的思想来写代码

代码展示

    static public void proces(int n,char start ,char help,char end){
        if(n==1){//终止条件
            move(start,end);
        }else {
            proces(n-1,start,end,help);
            move(start,end);
            proces(n-1,help,start,end);
        }
    }
   static public void move(char B,char E){
       System.out.println(B+"=====>"+E);
   }

参考资料

https://www.bilibili.com/video/BV1rs411Y76X?share_source=copy_web

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值