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

算法题(165):汉诺塔问题

审题:
本题需要我们找到最优的汉诺塔搬法然后将移动路径输出

思路:
方法一:递归

我们先分析题目

n为2的情况,我们先将第一个盘子移动到三号柱子上,然后再将二号盘子移动到二号柱子上

n为3的情况,我们先将前面两个盘子移动到三号柱子上,然后再将三号盘子移动到二号柱子上

所以大问题就可以分解为同样的子问题,都是将x柱子上的盘子通过y柱子移动到z柱子上

图示:

第一步:将前面n-1个盘子通过z柱子移动到y柱子上

第二步:将x柱子上的最后一个盘子借助y柱子移动到z柱子上

第三步:将y柱子上的n-1个盘子借助x柱子移动到z柱子上

解题:
 

#include<iostream>
using namespace std;
int n;
char a, b, c;
//x上的n个盘子借助y柱子移动到z柱子上
void func(int n, char x, char y, char z)
{//退出条件if (n == 0){return;}func(n - 1, x, z, y);printf("%c->%d->%c\n", x, n, z);func(n - 1, y, x, z);
}
int main()
{cin >> n >> a >> b >> c;func(n, a, c, b);return 0;
}

递归就是大问题的解决要依靠一模一样的小问题,此时我们就可以通过自己调用自己函数的方式来解决此类问题。

写出递归的方法:

1.给递归函数指定一个功能,并在递归函数调用自身的时候默认他可以实现指定的功能

2.只关注解决一个问题,而不要直接将递归展开思考

3.写出返回条件

信息学奥赛一本通(C++版)在线评测系统

http://www.xdnf.cn/news/12940.html

相关文章:

  • GitFlow 工作模式(详解)
  • 智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
  • Java中单向队列的多种实现类详解
  • 智警杯备赛--excel模块
  • CSS高级技巧及新增属性
  • LLMs 系列科普文(12)
  • 2025-06-02-IP 地址规划及案例分析
  • SDC命令详解:使用set_max_area命令进行约束
  • DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目
  • 一文掌握 Tombola 抽象基类的自动化子类测试策略
  • LMDeploy 课程
  • ubuntu下编译osg3.6.5源码
  • CSP信奥赛C++常用系统函数汇总
  • 异或和之差-字典树
  • 二分查找 -P1102 A-B 数对
  • 风力发电机领域的声纹监测产品
  • 循环神经网络(RNN):从理论到翻译
  • 【Elasticsearch】映射:详解 _source store 字段
  • 基于机器学习的智能故障预测系统:构建与优化
  • 基于算法竞赛的c++编程(22)二进制,十进制,16进制
  • 面向对象之 继承中的成员访问特点
  • split方法
  • mybatis执行insert如何返回id
  • 开疆智能Ethernet/IP转Modbus网关连接斯巴拓压力传感器配置案例
  • LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
  • MCP(Model Context Protocol)与提示词撰写
  • unipp---HarmonyOS 应用开发实战
  • 并发和并行
  • 相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
  • 例说局部性原理给程序带来的提升