汉诺塔问题

汉诺塔问题解决方法

该问题就是把除了最下面一层的盘子,上面的n-1个盘子当成一个整体
这样一来问题就转化为有两个盘子,三个柱子的问题,

  • 第一步就是把上面的盘子放到中转的盘子上面
  • 第二步把最后一个盘子放到目标柱子上
  • 第三步,把中转柱子上面的盘子全部转移到目标柱子上
package jianzhioffer;
import java.util.Arrays;
public class hannoi {
    public static void main(String[] args)
    {
        HanNuo(10, 'a', 'b', 'c');

        System.out.println();
    }
    //汉诺塔问题解决方法
    // 该问题就是把除了最下面一层的盘子,上面的n-1个盘子当成一个整体
   // 这样一来问题就转化为有两个盘子,三个柱子的问题,
    // 第一步就是把上面的盘子放到中转的盘子上面
  // 第二步把最后一个盘子放到目标柱子上
  //  第三步,把中转柱子上面的盘子全部转移到目标柱子上
    //汉诺塔的层数,最初的柱子,中转柱子,目标柱子
    static void HanNuo(int n, char a, char b, char c)
    {
        if (n == 1)   //是递归的终止条件
        {
            System.out.println("将盘子"+n+"从"+a+" ----->"+ c); //控制台输出每次操作盘子的动向
        }
        else
        {
            HanNuo(n - 1, a, c, b);      //将a柱子上的从上到下n-1个盘移到b柱子上
            System.out.println("将盘子"+ n+"从 "+a+ "-----> "+c);
            HanNuo(n - 1, b, a, c);      //将b柱子上的n-1个盘子移到c柱子上
        }
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值