整理:汉诺塔简析
大体上,要解决一个汉诺塔问题,就需要解决两个更简单的汉诺塔问题
以盘子数量 3 的汉诺塔问题为例
要将 3 个盘子从 A 移动到 C,就要:
- 将两个盘子从 A 移动到 B(子问题 1)
- 为了解决子问题 1,就要解决更简单的子问题 3、4,直到基本情况(即仅移动 1 个盘子)
- 将 A 最后的盘子移动到 C
- 将两个盘子从 B 移动到 C(子问题 2)
- 为了解决子问题 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);}
}
相关文章:
整理:汉诺塔简析
大体上,要解决一个汉诺塔问题,就需要解决两个更简单的汉诺塔问题 以盘子数量 3 的汉诺塔问题为例 要将 3 个盘子从 A 移动到 C,就要: 将两个盘子从 A 移动到 B(子问题 1) 为了解决子问题 1,就…...
Android 8.1 设置--声音中增加通话音量
Android 8.1 设置--声音中增加通话音量 近来收到项目需求,想要在设置--声音中增加一项通话音量调节,具体修改参照如下: /vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml <!-- Sound: Title for the opt…...
C#中使用OpenCvSharp4绘制直线、矩形、圆、文本
C#中使用OpenCvSharp4绘制直线、矩形、圆、文本 继之前的Python中使用Opencv-python库绘制直线、矩形、圆、文本和VC中使用OpenCV绘制直线、矩形、圆和文字,将之前的Python和C示例代码翻译成C#语言,很简单,还是借用OpenCvSharp4库中的Line、…...
Qt程序设计-自定义控件(提升法)
本文讲解如何使用提升法自定义控件,控件有界面。 实现自定义一个开关控件,控件上显示当前的状态。实现过程如下: 1、在创建的项目上,添加qt设计界面类。 2、选择widget 3、更改名称为MySwitchButton 4、添加两个图标资源文件,用来显示开关状态 5、添加两个label,一个…...
计算机网络基础知识笔记
1 HOST和PORT Claude-2-100k: 我来用简单的语言解释一下HOST和PORT这两个网络术语: HOST就是设备的IP地址,比如"127.0.0.1"就是我们本机的IP地址; PORT就是端口号,可以把它简单理解为设备上的门牌号。 举个类比,我们要给某个人发信件,需要知道…...
【iOS ARKit】2D肢体动作捕捉
人体肢体动作捕捉在动漫影视制作、游戏CG 动画、实时模型驱动中有着广泛的应用,利用 ARKit,无须额外的硬件设备即可实现 2D和3D人体一系列关节和骨骼的动态捕捉,由于移动AR 的便携性及低成本,必将促进相关产业的发展。 ARBody Tr…...
MAC word删除空白页
问题:MAC word删除空白页 解决: option删除键...
字面跳动前端面试题:React Hook为什么不能放在if/循环/嵌套函数里面?
答:首先,React Hooks 是为了简化组件逻辑和提高代码可读性而设计的。将 Hook 放在 if/循环/嵌套函数中会破坏它们的封装性和可预测性,使得代码更难维护和理解。同时,这样做也增加了代码的复杂度,可能会导致性能下降和潜…...
【SpringBoot】SpringBoot的web开发
📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 Wbe开发 使用Springboot 1)、创建SpringBoot应用,选中我们需要的模块; 2)、SpringBoot已经默…...
houdini 入门指南-参考自用,内有翻译错误
HOUDINI 18.5列1 GETTING STARTED 入门指南 What’s new in Houdini 18.5 胡迪尼18.5有什么新内容 New features and changes in Houdini 18.5.胡迪尼18.5的新功能和变化。Basics基础The basics of working with Houdini’s user interface.使用胡迪尼用户界面的基本知识。Shel…...
【笔记】SPN和PLMN 运营商网络名称显示
一、业务术语 缩写 全称 释义 CDNR Carrier Display Name Ressource 运营商显示名称资源 PLMN Public Land Mobile Network 公共陆地移动网络。 表示最终显示的网络运营商名字 SPN Service Provider Name SIM卡EF文件6F46。表示服务提供商名字,主要是SIM卡服务 OPL Operator …...
Selenium处理Alert弹窗
页面弹窗有 3 种类型: alert(警告信息) confirm(确认信息) prompt(提示输入) 对于页面出现的 alert 弹窗,Selenium 提供如下方法: 序号 方法/属性 描述 1 ac…...
FCIS 2023:洞悉网络安全新前沿,引领未来安全创新狂潮
在数字化浪潮席卷全球的今天,网络安全问题愈发凸显其重要性。 FCIS 2023网络安全创新大会作为业界瞩目的盛会,不仅汇聚了国际顶尖的网络安全专家,更展示了最前沿的安全技术与研究成果。那么,参与这场大会,我们究竟能学…...
4个最佳的免费全磁盘加密程序,总有一款适合你
全磁盘加密软件加密整个驱动器,而不仅仅是几个文件或文件夹。加密计算机的驱动器可以使你的私人数据免受窥探,即使你的计算机被盗。 你也不仅仅局限于一个硬盘驱动器。闪存驱动器和外部硬盘驱动器等外部设备也可以通过磁盘加密软件进行加密。 注意:Windows和macOS都集成了…...
SQL语句创建数据库
在SQL中,可以使用CREATE DATABASE语句来创建数据库。下面是一个示例: CREATE DATABASE database_name;其中,database_name是要创建的数据库的名称。你可以将其替换为你想要的数据库名称。 请注意,在不同的SQL数据库管理系统中&a…...
【lesson38】让minishell支持重定向
文章目录 minishell支持重定向minishell完整代码 minishell支持重定向 支持重定向的核心逻辑: 1.分析字符串是否含有重定向的符号,并且提取文件名。 #define INPUT_REDIR 0 //输入重定向 #define OUTPUT_REDIR 1 //输出重定向 #define APPEND_REDIR…...
【安装指南】maven下载、安装与配置详细教程
🌼一、概述 maven功能与python的pip类似。 Apache Maven是一个用于软件项目管理和构建的强大工具。它是基于项目对象模型的,用于描述项目的构建配置和依赖关系。以下是一些关键的 Maven 特性和概念: POM(Project Object Model&…...
matplotlib-中文乱码问题解决方案
前言 本文主要解决matplotlib在画图时,出现的中文乱码问题,具体问题示意如下: 下面将针对这个问题直接给出具体的解决步骤。 具体步骤 1、首先去网上下载并安装SimHei字体,其它字体也行,如下 并将它安装在此目录下…...
Redis(十一)单线程VS多线程
文章目录 概述为何选择单线程主要性能瓶颈多线程特性和IO多路复用概述Unix网络编程中的五种IO模型Blocking IO-阻塞IONoneBlocking IO-非阻塞IOIO multiplexing-IO多路复用signal driven IO-信号驱动IOasynchronous IO-异步IO 场景:引出epoll总结 开启Redis多线程其…...
【微服务】Spring Boot集成ELK实用案例
推荐一款我一直在用国内很火的AI网站,包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型,支持PC、APP、VScode插件同步使用,点击链接跳转->ChatGPT4.0中文版 一、前言 在现代软件开发中,微服务架构已成为一种流行趋势。…...
突破魔兽争霸3帧率限制:WarcraftHelper实现180fps流畅游戏体验全攻略
突破魔兽争霸3帧率限制:WarcraftHelper实现180fps流畅游戏体验全攻略 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 在现代高性能电脑上运…...
Python Docker镜像性能调优:5个关键优化策略
Python Docker镜像性能调优:5个关键优化策略 【免费下载链接】python Docker Official Image packaging for Python 项目地址: https://gitcode.com/gh_mirrors/python6/python Python Docker镜像性能调优是提升应用部署效率和运行速度的关键环节。本文将分享…...
电磁场仿真实战——5. 有限元法(FEM)在工程优化中的应用
1. 有限元法(FEM)在电磁场仿真中的核心价值 想象一下你正在设计一台新型电机,需要精确计算内部电磁场的分布。传统解析方法面对复杂几何结构时束手无策,而有限元法就像把整个电机拆解成无数个"乐高积木",在每…...
3种RPA文件解包实战技巧:从游戏资源提取到技术深潜的完整指南
3种RPA文件解包实战技巧:从游戏资源提取到技术深潜的完整指南 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 当你沉浸在视觉小说的世界中,是否曾好奇那些…...
用快马AI十分钟打造高保真电商交互原型,验证你的UI-UX-Pro-Max设计
最近在做一个电商项目,需要快速验证产品详情页的交互设计。作为设计师,我一直在寻找能快速把设计稿变成可交互原型的工具。尝试了InsCode(快马)平台后,发现它特别适合做这种高保真原型验证。下面分享下我的具体操作流程和心得: 明…...
Win11Debloat极速优化:三步让老旧电脑性能倍增的终极指南
Win11Debloat极速优化:三步让老旧电脑性能倍增的终极指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...
终极存储设备容量检测指南:3分钟识别假冒U盘和SD卡
终极存储设备容量检测指南:3分钟识别假冒U盘和SD卡 【免费下载链接】f3 F3 - Fight Flash Fraud 项目地址: https://gitcode.com/gh_mirrors/f3/f3 在数字时代,存储设备容量造假已成为普遍问题,许多用户购买的大容量U盘、SD卡和移动硬…...
Word文档转换终极方案:3步实现高效Markdown格式转换
Word文档转换终极方案:3步实现高效Markdown格式转换 【免费下载链接】word-to-markdown A ruby gem to liberate content from Microsoft Word documents 项目地址: https://gitcode.com/gh_mirrors/wo/word-to-markdown 在当今技术文档管理和内容创作领域&a…...
OpenClaw技术写作助手:Qwen2.5-VL-7B自动生成带示意图的教程
OpenClaw技术写作助手:Qwen2.5-VL-7B自动生成带示意图的教程 1. 为什么需要自动化技术写作 作为一名长期与技术文档打交道的开发者,我经常面临一个矛盾:既要保证文档的专业性和完整性,又要应对快速迭代的开发节奏。传统文档创作…...
Windows下Qt集成libcurl:从零搭建网络请求环境与实战验证
1. 为什么选择Qtlibcurl组合 在Windows平台开发带网络功能的Qt应用时,你可能纠结过该用QNetworkAccessManager还是第三方库。我做过十几个跨平台项目,实测下来libcurl有三大不可替代的优势: 首先是对HTTPS的完美支持。Qt自带的网络模块在Wi…...
