【基础】递归问题—汉诺塔 - 题解

news/2024/11/15 4:43:32/文章来源:https://www.cnblogs.com/jerrycyx/p/18331304

【基础】递归问题—汉诺塔

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 127MB,其他语言 254MB

描述

汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着 \(64\) 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数) \(18446744073709551615\),看来,众僧们耗尽毕生精力也不可能完成金片的移动。
image
后来,这个传说就演变为汉诺塔游戏:

  1. 有三根杆子 \(A,B,C\)\(A\) 杆上有若干碟子
  2. 每次移动一块碟子,小的只能叠在大的上面
  3. 把所有碟子从 \(A\) 杆全部移到 \(C\) 杆上

经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
如 3 阶汉诺塔的移动:\(A→C,A→B,C→B,A→C,B→A,B→C,A→C\) 此外,汉诺塔问题也是程序设计中的经典递归问题。

算法思路:

  1. 如果只有一个金片,则把该金片从源移动到目标棒,结束。
  2. 如果有 \(n\) 个金片,则把前 \(n−1\) 个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前 \(n−1\) 个移动到目标棒。

输入描述

一个整数 \(N\),表示 \(A\) 柱上有 \(N\) 个碟子。(\(0<n≤10\)

输出描述

若干行,即移动的最少步骤

用例输入 1

3

用例输出 1

A To C
A To B
C To B
A To C
B To A
B To C
A To C

提示

\(0<n≤10\)

代码

#include<cstdio>
using namespace std;int n;void DFS(int x,int from,int to)
{if(x==1){printf("%c To %c\n",'A'+from-1,'A'+to-1);return;}int as=6-from-to;DFS(x-1,from,as);DFS(1,from,to);DFS(x-1,as,to);return;
}int main()
{scanf("%d",&n);DFS(n,1,3);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773855.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter如何添加jar包

1.确保方法继承抽象类 AbstractJavaSamplerClient (项目中确保已经成功添加了jmeter的依赖)点击查看代码 </details> </details> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId>…

12. 函数的名称空间与作用域

1. 名称空间 1.1 概念 名称空间是存放变量名与变量值映射关系的地方 1.2 分类 1.2.1 内置名称空间 Python解释器运行而产生的名称空间,如def、if、else、len Python解释器运行---产生 Python解释器关闭---释放 1.2.2 全局名称空间 在python文件中编写的代码运行产生的名字都会…

架构 | 互联架构的图建模分析

互联网络泛泛谈 互联网络是一种图结构,节点之间通过边连接。比如一般总线计算机架构中 CPU、Memory、Timer 等模块看作节点, 通过总线相连。每个节点在网络中的身份是不对等的,有 Master 和 Slave 之分,或者按 TLM 中的模型 initiator 和 target。Initiator 有权申请发起传…

关于嵌入式QML dict_pinyin.dat的编译更新

硬件平台:全志的A40I-H 软件平台:Linux 内核版本3.10.65 QT版本:5.9.0重新编译dict_pinyin.dat的作用 1.解决输入"nss"导致输入法崩溃的问题 2.解决输入某些嵌入式平台不支持的字体,例如“捃”,导致程序崩溃的问题源码路径: ~/qt-everywhere-opensource-src-…

15-并发控制理论

15-并发控制理论 并发控制横跨了多个层级:operator Execution 操作执行 Access Methods 读表 buffer Pool Manager 缓存池日志恢复buffer Pool Manager 缓存池 Disk 磁盘管理Motivation:当多人修改数据库同一条数据,就会出现竞争问题 把100块钱从A账户转移到B账户,如果A账…

安装 jar包为windows服务

下载安装Java Service Wrapper 下载https://www.krenger.ch/blog/category/windows/ 安装 下载后在D盘找个位置解压: 在同级目录建一个新的文件夹,就命名JavaServiceWrapper吧:在文件夹JavaServiceWrapper下新建bin、conf、lib、logs、jre文件夹: 给下载解压的src/bin下边标…

2. GPIO读写

GPIO简介GPIO(全称为General Purpose Input/Output),即通用输入/输出,可以认为GPIO是片外外设与片内的通信接口,通过控制GPIO的电平状态,可以实现片外外设与片内的通信以及数据的输入输出。对于st32F103系列的GPIO,其命名规则为GPIO+端口号,如GPIOA,GPIOB。对于每个端口又…

使用 Easysearch 打造企业内部知识问答系统

大家可能都有这样的经历,刚入职一家企业时,同事往往会给你分享一些文档资料,有可能是产品信息、规章制度等等。这些文档有的过于冗长,很难第一时间找到想要的内容。有的已经有了新版本,但员工使用的还是老版本。 基于这种背景,我们可以利用 Easysearch 加 LLM 实现一个内…

Web系列-文件上传

Web系列-文件上传 做题思路 前端限制了上传文件的后缀,可以在前端修改代码或者bp抓包,再上传符合前端要求的文件类型,抓包后进行修改。 如果是php的环境,可以利用.user.ini,是一个局部配置文件,可以通过配置选项使每个php文件头或文件尾都进行文件包含 .user.ini利用需要…

【ollama】手把手教你布置本地大语言模型 以及各种常见用途#如何加载guff模型到ollama #如何更改ollama目录

ollama介绍 Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。 以下是其主要特点和功能概述:简化部署:Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。轻量级与可扩展:作…

SPONGE常用教程0:软件安装教程

课程准备阶段,介绍最简明安装流程,安装过程中如果遇到其他问题,请移步官方教程。第三方软件只提供个人安装心得。 软件安装环境默认为linux。 软件支持 SPONGE(Simulation Package tOward Next GEneration molecular modelling)是由北京大学高毅勤课题组开发的分子动力学模…

使用高速收发器进行数据传输(一)

本来想做一个这样的项目,但是简单地使用这个方法传递数据实在是没意义; 我希望最后以万兆网来实现这点; 目前事实上只是按照UG476的要求给IP核数据和取数即可,并不困难;