c语言叠罗汉问题解决思路,如何利用分治算法解决 ‘叠罗汉’ 问题,也叫作汉诺塔问题...

问题: 将A塔的所有盘子移动到C塔,期间可借助B塔,但一直要保证大盘下,小盘上

0a9b8685b8109c97e05a2afe38dc3e2d.png

使用java写了分治算法,化大为小,分而治之,加上递归,便可轻松解决这个问题!

static int step = 0;

public static void main(String[] args) {

System.out.println("默认所有盘子在 A 塔,从上到下编号依次为1~8");

System.out.println("------------------------------------");

hanoiTower(8, 'A', 'B', 'C');

System.out.println("-------------------------");

System.out.println("一共需要走: " + step + " 步");

}

/**

* @param num 盘子数

* @param A 放在 a 盘的塔

* @param B 放在 b 盘的塔

* @param C 放在 c 盘的塔

*/

public static void hanoiTower(int num, char A, char B, char C) {

//只有一个盘时直接: A -> C

if (num == 1) {

System.out.println("第" + (++step) + "步:将编号为 1 的盘从 " + A + " 移动到 " + C);

} else {

// 上面所有盘先 A -> B,递归时借助 C

hanoiTower(num - 1, A, C, B);

// 然后最下面的盘移动到 C

System.out.println("第" + (++step) + "步:将编号为 " + num + " 的盘从 " + A + " 移动到 " + C);

//最后把 B -> C ,中间借助 A

hanoiTower(num - 1, B, A, C);

}

}

其中的代码逻辑注释中基本已经很清晰,当盘子数为8时,递归调用的逻辑如下结果所示:

cd9bd4ebd9ffb392c30575bdf0bc844c.png

332caf42e4e373ba8a980f8c4bd379bb.png

PS:如有疑问,请联系21班李军

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值