当前位置: 首页 > news >正文

整理:汉诺塔简析

大体上,要解决一个汉诺塔问题,就需要解决两个更简单的汉诺塔问题

以盘子数量 3 的汉诺塔问题为例

要将 3 个盘子从 A 移动到 C,就要:

  1. 将两个盘子从 A 移动到 B(子问题 1)
    1. 为了解决子问题 1,就要解决更简单的子问题 3、4,直到基本情况(即仅移动 1 个盘子)
  2. 将 A 最后的盘子移动到 C
  3. 将两个盘子从 B 移动到 C(子问题 2)
    1. 为了解决子问题 2,就要解决更简单的子问题 5、6,直到基本情况(即仅移动 1 个盘子)

图示

代码

/*** 汉诺塔问题*/
public class TM0806 {public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {movePlant(A.size(), A, B, C);}/*** @param size      需要移动的盘子的数量* @param start     起始柱子* @param auxiliary 辅助柱子* @param target    目标柱子*/public void movePlant(int size, List<Integer> start, List<Integer> auxiliary, List<Integer> target) {// 当只剩一个盘子时,直接将它从第一个柱子移动到第三个柱子if (size == 1) {target.add(start.remove(start.size() - 1));return;}// 首先将 n-1 个盘子,从第一个柱子移动到第二个柱子movePlant(size - 1, start, target, auxiliary);// 然后将最后一个盘子移动到第三个柱子上target.add(start.remove(start.size() - 1));// 最后将第二个柱子上的 n-1 个盘子,移动到第三个柱子上movePlant(size - 1, auxiliary, start, target);}@Testvoid test() {List<Integer> A = new ArrayList<>();List<Integer> B = new ArrayList<>();List<Integer> C = new ArrayList<>();A.add(3);A.add(2);A.add(1);hanota(A, B, C);Assert.assertEquals(C.get(0).intValue(), 3);Assert.assertEquals(C.get(1).intValue(), 2);Assert.assertEquals(C.get(2).intValue(), 1);}
}

http://www.lryc.cn/news/293611.html

相关文章:

  • Android 8.1 设置--声音中增加通话音量
  • C#中使用OpenCvSharp4绘制直线、矩形、圆、文本
  • Qt程序设计-自定义控件(提升法)
  • 计算机网络基础知识笔记
  • 【iOS ARKit】2D肢体动作捕捉
  • MAC word删除空白页
  • 字面跳动前端面试题:React Hook为什么不能放在if/循环/嵌套函数里面?
  • 【SpringBoot】SpringBoot的web开发
  • houdini 入门指南-参考自用,内有翻译错误
  • 【笔记】SPN和PLMN 运营商网络名称显示
  • Selenium处理Alert弹窗
  • FCIS 2023:洞悉网络安全新前沿,引领未来安全创新狂潮
  • 4个最佳的免费全磁盘加密程序,总有一款适合你
  • SQL语句创建数据库
  • 【lesson38】让minishell支持重定向
  • 【安装指南】maven下载、安装与配置详细教程
  • matplotlib-中文乱码问题解决方案
  • Redis(十一)单线程VS多线程
  • 【微服务】Spring Boot集成ELK实用案例
  • 已解决: ImportError: cannot import name ‘relu‘ from ‘keras.layers‘ 问题
  • python-产品篇-火车票分析助手
  • 设计一个可以智能训练神经网络的流程
  • 自然语言处理(02/10):自然语言处理任务和应用程序
  • Jmeter学习系列之三:测试计划详细介绍
  • mermaid使用指南+notion使用实例-持续更新中
  • Pytroch 自写训练模板适合入门版 包含十五种经典的自己复现的一维模型 1D CNN
  • 【30秒看懂大数据】变量
  • Redis - 多集群数据源配置
  • 五大架构风格之四-虚拟机架构风格
  • 在 C# 中 checked 和 unchecked 关键字