算法设计与分析——分治与递归策略——hanoi问题

【7-3 汉诺(Hanoi)塔问题】古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘, #include <iostream> using namespace std; void hanoi(int n, char a, char b, char c) { if(n==0) return; hanoi(n-1, a, c, b); printf("%c-->%c\n", a, b); hanoi(n-1, c, b, a); } int main() { int n; cin >> n; hanoi(n, 'a', 'b', 'c'); ret.. 阅读详情

在这里插入图片描述
**汉诺塔问题:**古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。我们的移动盘子的步骤为:
• 如果只有 1 个盘子,则不需要利用C塔,直接将盘子从A移动到B。
• 如果有 2 个盘子,可以先将盘子2上的盘子1移动到C;将盘子2移动到B;将盘子1移动到B。这说明了:可以借助C将2个盘子从A移动到B。

以此类推,上述的思路可以一直扩展到 n 个盘子的情况,将将较小的 n-1个盘子看做一个整体,也就是我们要求的子问题,以借助B塔为例,可以借助空塔B将盘子A上面的 n-1 个盘子从A移动到B;将A最大的盘子移动到C,A变成空塔;借助空塔A,将B塔上的 n-2 个盘子移动到A,将B最大的盘子移动到C,B变成空塔…

#include<bits/stdc++.h>
using namespace std;
int i = 1;
void move(char x,char y)
{

    cout << "第"<<setw(4)<<i++<<"步,将盘子从" << x << "移动到" << y << endl;
}


void hanoi(int n,char a,char b,char c)
{
    if(n>0)
    {
    hanoi(n - 1, a, c, b);
    move(a, b);
    hanoi(n - 1, c, b, a);

    }
   
}
int main()
{

	int n;
	cout<<"请输入要进行hanoi问题的层数:"<<endl;
	cin>>n;
    hanoi(n, 'a', 'b', 'c');
    system("pause");
    return 0;
}

在这里插入图片描述

PTA 7-343 汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上。其中,n为盘子个数,从a座到b座,c座作为中间过渡,该函数的功能是输出搬盘子的路径。step1:将起始柱上的 n-1 个圆盘移动到辅助柱上;step2:将起始柱上遗留的 1 个圆盘移动到目标柱上;step3:将辅助柱上的所有圆盘移动到目标柱上。输入在一行中给出1个正整数n。 阅读详情

相关推荐

汉诺(Hanoi)塔问题 (20分)

汉诺(Hanoi)塔问题 (20分) 古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上。现要求用程序模拟该过程,输入一个正整数n,代表盘子的个数,编写函数 void hanoi(int n,char a,char b,char c) 其中,n为盘子个数,从a座到b座,c座作为中间过渡,该函数的功能是输出搬盘子的路径。 输入格式: 输入在一行中

qq_43563207的博客 6385

java算法1——河内之塔

  河内之塔游戏规则:有A、B、C三个石棒,A上有若干个从小到大依次排列的盘子,盘子的数量为n,现在要求,将A棒上的盘子依次移动到C棒上,并且移动过程中要保证小盘在大盘之上。   (1)当n=1时:将盘子直接从A移动到C; 图一   (2)当n=2时:将小盘子1从A移动到B;           将大盘子2从A移动到C;           将小盘子1从B移动到C; 图二   (3)当n=3时:将盘子1从A移动到C;           将盘子2从A移动到B;       

weixin_44356698的博客 532

算法设计与分析期末复习题

一. 选择题 1.Hanoi塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:(B) 4. 算法分析中,记号O表示(B ), 记号 表示(A ), 记号 表示(D)。 A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界 以下关于渐进记号的性质是正确的有:( A) A. B. C. O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D. 4 程

qq_43717119的博客 1万+

7-3 汉诺(Hanoi)塔问题 (20 分)

7-3 汉诺(Hanoi)塔问题 (20 分) 古代某寺庙中有一个梵塔,塔内有3个座A、B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上。有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大盘不能压在小盘上。现要求用程序模拟该过程,输入一个正整数n,代表盘子的个数,编写函数 void hanoi(int n,char a,char b,char c) 其中,n为盘子个数,从a座到b座,c座作为中间过渡,该函数的功能是输出搬盘子的路径。 输入格式: 输

wcd278212784的博客 1509

【算法】【《计算机算法设计与分析(第5版)》笔记】第二章:递归与分治策略

【算法】【《计算机算法设计与分析(第5版)》笔记】第二章:递归与分治策略

丷从心·的博客 2244

ROS2机械臂实战:从基础控制到视觉抓取

本文详细介绍了ROS2机械臂从仿真环境搭建到视觉抓取的全流程实战指南。内容涵盖使用Gazebo搭建仿真环境、编写基础控制节点、集成视觉感知进行目标检测与坐标变换,并设计状态机逻辑实现自动化抓取。通过系统集成与联调,帮助开发者掌握ROS2机械臂开发的核心技能。

weixin_29197699的博客 448

算法设计实验——递归与分治

分解时间就是把一个待排序序列分解成两序列,时间为一常数,时间复杂度o(1).解决问题时间是两个递归式,把一个规模为n的问题分成两个规模分别为n/2的子问题,时间为2T(n/2).合并时间复杂度为o(n)。针对Hanoi塔问题,设计算法将A柱子上的n个盘子移动到C柱子上,中间可以借助B柱子,输出具体移动的步骤,输出的格式参考实验结果中的输出格式,具体要求如下:①采用分治策略设计算法②算法实现采用递归方法。(1)题目要求:给定一个数列,通过合并排序算法对数列进行排序,排序后的数列从小到大排序。

肉夹馍的博客 200

深入Linux网络子系统:STMMAC驱动如何通过MDIO总线与PHY芯片“对话”

本文深入解析了Linux网络子系统中STMMAC驱动通过MDIO总线与PHY芯片的通信机制。详细介绍了MDIO总线的注册流程、PHY设备的绑定机制以及设备树配置,帮助开发者理解MAC控制器与PHY芯片的协作基础,优化网络通信性能。

weixin_26897585的博客 448

【算法设计与分析】实验2:递归与分治—Hanoi塔、棋盘覆盖、最大子段和

在设计递归算法时,必须明确递归基准条件和递归表达式。递归基准条件是递归的终止条件,决定了递归何时停止,否则代码不会有输出结果。在Hanoi塔问题的设计中,我注意到了递归调用的顺序和参数的传递方式,确保递归能够正确进行。

m0_73970214的博客 1156

[0352]基于JAVA的停车场收费智慧管理系统的设计与实现

其次,从经营管理层面考虑,本系统涵盖了丰富的月卡管理和财务结算功能,如月卡用户管理、缴费、注销、挂失、解挂、补办等全流程服务,以及临保和月保的结算汇总与欠费查询等功能,这不仅有助于规范停车场的日常运营管理,更能有效提高财务管理效率,降低运营成本,实现精细化、数字化的财务管控。综上所述,本课题计划研发的基于Java的停车场收费智慧管理系统将在现有研究成果的基础上,重点优化月卡用户全生命周期管理和财务统计分析功能,以满足现代停车场高效、精准、安全的管理需求,紧跟行业发展趋势,为推动智慧城市的建设贡献一份力量。

muyu2980的专栏 589

群晖NAS变身私有Git服务器:DS218+部署与TortoiseGit客户端实战指南

本文详细介绍了如何将群晖NAS(如DS218+)变身为私有Git服务器,并配置TortoiseGit客户端实现高效代码管理。通过硬件检查、系统更新、Git Server套件安装及权限配置等步骤,帮助开发者在局域网内搭建安全、高速的代码托管环境,特别适合小团队协作。

weixin_29252171的博客 223

哈工大威海算法设计与分析_算法设计与分析之分治策略的设计思想

分治策略的基本思想分治策略(Divide and Conquer)将原始问题划分或归结为规模较小的子问题递归或者迭代的求解每个子问题将子问题的解综合得到原问题的解在设计分治策略时,一定要注意以下几点:子问题与原问题的性质完全一样子问题之间可以彼此独立的求解递归停止时,子问题可以直接进行求解得出结果。下面以二分检索的例子来分析分之策略的思想。1.1 二分检索的设计思想设算法:Binary Searc...

weixin_39692254的博客 150

告别手动调参!PSCAD 4.2的Multiple-Run功能,5分钟搞定交流故障批量仿真

本文详细介绍了PSCAD 4.2的Multiple-Run功能如何高效处理交流故障批量仿真,告别传统手动调参的低效模式。通过五步配置法,工程师可在5分钟内完成数百次参数组合的仿真,显著提升电力系统分析效率。文章还包含工业级应用案例和高级调试技巧,助力实现故障仿真的自动化与智能化。

weixin_42552716的博客 275

计算机设计第二章

递归与分治策略 2-1Hanoi塔问题的非递归算法 证明:Hanoi塔问题的递归算法与非递归算法实际上是一回事。 分析: 递归问题算法: void hanoi(int n,int A,int B,int C) { if (n>0) { hanoi(n-1,A,C,B); move(n,A,B); hanoi(n-1,C,B,A); } void hanoi...

weixin_30316097的博客 2059

手机流畅的秘密:拆解LPDDR5X在骁龙8 Gen2平台上的电源与信号完整性设计

本文深入解析了LPDDR5X内存与骁龙8 Gen2处理器在旗舰手机中的协同设计,重点探讨了0.5V超低电压下的电源完整性设计以及8.5Gbps高速传输中的信号完整性挑战。通过详细的电源树架构、关键器件选型和布线策略分析,揭示了如何实现高性能与低功耗的完美平衡,为手机流畅体验提供硬件保障。

weixin_30235225的博客 484

SAP S/4HANA 数据 API 化与 MCP 集成全流程实战指南

通过 RAP 发布 OData、利用 Communication Arrangement 打通外网、再在 MCP-server 里封装函数签名,你就能把 S/4HANA 的核心数据安全、标准化地暴露给任意支持 MCP 的大模型。这条链路的每一个环节都由 SAP 与 MCP 社区提供了现成框架,既兼顾了企业合规,也让 LLM 落地更为轻量。期待你在项目里把这些拼图真正串联起来,让业务数据与生成式 AI 碰撞出高价值的火花。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 975

算法分析上课笔记(1)

#递归与分治策略 递归的概念:直接或间接地调用自身的算法称为递归算法 例:二叉树的先序遍历 分治法的的设计思想:将一个难以直接解决的大问题, 分割成一些规模较小的相同问题,以便各个击破, 分而治之。(对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直 到问题规模足够小,很容易求出其解为止。)(自底向上) 递归与分治法经常同时应用到算法设计之中。 ##1.阶乘函数 边界条件与递归方程是递归函数的两个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。

qq_45667304的博客 359

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1122

中国矿业大学计科算法导论菜鸟笔记

中国矿业大学计科算法导论笔记

weixin_53711294的博客 1242

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

递归系列1

(文章仅为小白作者学习理解记录之用,程序、语言等可能引自若干参考书) Hanoi塔问题的理解: (图引用自《算法分析与设计PPT》) 递归算法表示如下: void hanoi( int n , int a ,int b , int c ) {     if ( n > 0 )     {  hanoi ( n-1 , a , c , b );        move

u010579948的专栏 351

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【算法设计与分析】13 分治策略的设计思想

算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录1. 分治策略的基本思想1.1 二分检索的设计思想1.2 二分归并排序的设计思想1.3 Hanoi塔的递归算法2 小结 1. 分治策略的基本思想 分治策略(Divide and Conquer) 将原始问题划分或归结为规模较小的子问题 递归或者迭代的求解每个子问题 将子问...

厚积薄发 3896

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

算法设计与分析(超详解!) 第二节 递归与分治

递归法和分治法

2201_76115387的博客 2588

【算法设计与分析】第3章 递归与分治策略

递归与分治策略

nosteglic 1091

递归法---实现 N 阶 Hanoi 塔问题的递归算法

本次实验通过实现N阶Hanoi塔问题的递归算法,深入探讨了递归思想的应用。Hanoi塔问题要求将N个盘子从源柱A移动到目标柱C,借助辅助柱B,且遵循每次只能移动一个盘子、大盘子不能放在小盘子上的规则。递归算法的核心思想是将问题分解为三个步骤:先将n-1个盘子从A移动到B,再将第n个盘子从A移动到C,最后将n-1个盘子从B移动到C。实验通过C代码验证了算法的正确性,并输出了N=4时的搬动过程。实验结果表明,Hanoi塔问题的最优解步数为2^n-1,时间复杂度为O(2^n)。

2402_87028704的博客 1005

算法设计与分析 (2. 递归与分治策略) Algorithm design & analysis (2. Recursion and divide&conquer))

2.1 递归的概念 直接或间接地调用自身的算法称为递归算法 例2.1 累加函数 累加函数可递归地定义为: s(n)={1,n=1;s(n−1)+n,n>1.s(n) = \left\{\begin{array}{ll}1, & n = 1;\\ s(n-1) + n, & n > 1.\end{array}\right.s(n)={1,s(n−1)+n,​n=1;n>1.​ public static int sum(int n)

minfanphd的博客 3354

算法设计与分析第2章 递归与分治策略

第2章 递归与分治策略 2.1 递归算法 递归算法:直接或间接地调用自身的算法。 递归函数:用函数自身给出定义的函数。两个要素:边界条件、递归方程 优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性。 缺点:运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。 解决方法:在递归算法中消除递归调用,使其转化为非递归算法。 1、采用一个用户定义的栈来模拟系统的递归调用...

ccchenxi的博客 1067
上一篇: C++11的for循环使用auto的新用法
下一篇: 二分法——leetcode35. 搜索插入位置
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值