汉诺塔求解

在这里插入图片描述
条件1:将问题拆解为第n个盘和n-1个盘
条件2:每次都是将n-1个盘看成整体移动到b,然后将第n个盘移动到c,然后n-1个盘重复上次操作
条件3:最小子问题就是当只有一个盘的时候

package StructDate;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: 从南到北
 * @Date: 12/07/2021/10:13
 * @Description:

   *
   * @param n  一共需要移动的盘子
  * @param a  盘子移动的起始柱子
    * @param b  借助的柱子
   * @param c  盘子需要移动到的目标柱子
  */

public class HanioTest {
    public static void main(String[] args) {
        int n = 4;
//        int n = 1;
        char a = 'A',b = 'B',c = 'C';
        hanio(n,a,b,c);
    }


    public static void hanio(int n,char a, char b, char c){
        //只有一个盘子的时候,就直接从A移到C
        if(n == 1){
            move(n,a,c);
        }else{
            //三步曲,注意观察,a,b,c三个的位置变化
            //1.把 n-1 个盘子看成一个整体,借助 C 从 A 移动到 B
            hanio(n-1,a,c,b);
            //2.把第 n 个盘子从 A 移动到 C
            move(n,a,c);
            //3.再把 n-1 盘子整体,借助 A 从 B 移动到 C
            hanio(n-1,b,a,c);
        }
    }

    public static void move(int n , char a, char b){
        System.out.println("把第"+ n +"个盘子从"+ a +"移到"+ b);
    }
}

在这里插入图片描述

递归解法:https://www.cnblogs.com/starry-skys/p/12555829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值