【算法】4.分治的应用——汉诺塔问题

一、解法思路

一共有64个盘子,把他们从X-->Z

1因为只能大的在下面所以,先通过移动把第64个移动到Z,首先需要把前63个从X-->Y

         把前63个从X-->Y,就需要前62个X-->Z,把前62个先当一个整体

        然后把第63个从X-->Y

        然后接着遍历,把前62个从Z-->Y

2. 然后把第64个从X-->Z

3.然后前63个都到Y上了,第64个已经到Z了,接着就需要把第63个移动到Z上,就和第1,2的步骤一样,只不过1,2步骤是把第64个移动到Z上,还有的区别就是借助的柱子不一样,由此遍历到最后一块结束遍历

二、代码

package p5.分治回溯;
//汉诺塔问题
public class hannuota {
    public static void main(String[] args) {
        String x="x";
        String y="y";
        String z="z";
        hanoi(3,x,y,z);
    }

    private static void hanoi(int n, String begin, String mid, String end) {
        if (n==1){
            System.out.println(begin+"-->"+end);
        }else{
            hanoi(n-1,begin,end,mid);
            System.out.println(begin+"-->"+end);
            hanoi(n-1,mid,begin,end);
        }

    }
}

三、结果

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值