关于Hanoi塔的实现

  • 首先,在此之前,我们需要了解一下递归这个东西;

在我看来,递归这个东西就是栈的进出;

  • 向下:进栈
  • 回溯:出栈

在进栈之前标记状态,输入到栈中;

#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char x,char y,char z){if(n==1){cout<<x<<"->"<<z<<endl; }else{hanoi(n-1,x,z,y);cout<<x<<"->"<<z<<endl; hanoi(n-1,y,x,z);}
}
int main(){int n;char a='a',b='b',c='c';cin>>n;hanoi(n,a,b,c);return 0;
}
#mermaid-svg-pd2F3ehKRzM0fISN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .error-icon{fill:#552222;}#mermaid-svg-pd2F3ehKRzM0fISN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pd2F3ehKRzM0fISN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pd2F3ehKRzM0fISN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pd2F3ehKRzM0fISN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pd2F3ehKRzM0fISN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pd2F3ehKRzM0fISN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pd2F3ehKRzM0fISN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pd2F3ehKRzM0fISN .marker.cross{stroke:#333333;}#mermaid-svg-pd2F3ehKRzM0fISN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pd2F3ehKRzM0fISN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .cluster-label text{fill:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .cluster-label span{color:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .label text,#mermaid-svg-pd2F3ehKRzM0fISN span{fill:#333;color:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .node rect,#mermaid-svg-pd2F3ehKRzM0fISN .node circle,#mermaid-svg-pd2F3ehKRzM0fISN .node ellipse,#mermaid-svg-pd2F3ehKRzM0fISN .node polygon,#mermaid-svg-pd2F3ehKRzM0fISN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pd2F3ehKRzM0fISN .node .label{text-align:center;}#mermaid-svg-pd2F3ehKRzM0fISN .node.clickable{cursor:pointer;}#mermaid-svg-pd2F3ehKRzM0fISN .arrowheadPath{fill:#333333;}#mermaid-svg-pd2F3ehKRzM0fISN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pd2F3ehKRzM0fISN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pd2F3ehKRzM0fISN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-pd2F3ehKRzM0fISN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-pd2F3ehKRzM0fISN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pd2F3ehKRzM0fISN .cluster text{fill:#333;}#mermaid-svg-pd2F3ehKRzM0fISN .cluster span{color:#333;}#mermaid-svg-pd2F3ehKRzM0fISN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pd2F3ehKRzM0fISN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

进栈
出栈并输出a->c
出栈并结束三条指令
出栈并结束三条指令
进栈并输出a->c
进栈并输出b->a
出栈并输出b->c
结束三条语句
进栈并输出c->b
进栈并输出a->c
出栈并输出a->b
出栈并结束三条指令
start
n-1,y,x,z
n-1,x,z,y
move
n=1
move1
n1=1
void hanoi(int n,char x,char y,char z){1   if(n==1){2   cout<<x<<"->"<<z<<endl;
3   }
4   else{5       hanoi(n-1,x,z,y);
6       cout<<x<<"->"<<z<<endl;
7       hanoi(n-1,y,x,z);
8   }
}
//解释:进栈的当前状态;
//我这个只是关于3阶hanoi的解释;
1、start:(5行,3,'a','b','c');//n==3;
//n-1,x,z,y:表示的hanoi(n-1,x,z,y);
//同理:hanoi(n-1,y,x,z);
2、两个节点:
n-1,x,z,y:(5行,2,'a','c','b')
n-1,y,x,z:(7行,2,'b','a','c')
3、四个节点
n==1:(1,'a','b','c')
move:(1,'c','a','b')
n1==1:(1,'b','c','a')
move1:(1,'a','b','c')
3
A->C
A->B
C->B
A->C
B->A
B->C
A->C

这个hanoi塔递归是我在b站上找的视频,让我明白了递归的原理,不再只停留在自己用自己;

  • 递归就是树的进入与回溯;
  • 递归就是进栈与出栈

链接:懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩_bilibili

有错误,请指正;

关于Hanoi塔的实现相关推荐

  1. Hanoi塔(分治法的应用)

    1.分治法 分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之. 一般来说,分治算法在每一层递归上都有3个步骤: (1)分解:将问题分解成一系列子问题. ...

  2. 二 用标准c语言实现hanoi塔问题,天大2016年1二月《数据结构》期末大作业考核要求.doc...

    数据结构要求:独立完成,作答时要按照模版信息填写完整,写明题型.题号:作答方式:手写作答或电脑录入,使用学院统一模版(模版详见附件):提交方式:以下两种方式任选其一,手写作答的同学可以将作业以图片形式 ...

  3. Hanoi塔(汉诺塔/梵天塔)问题

    Hanoi塔 汉诺塔(梵天塔/Hanoi)问题是计算机中比较典型的一个递归问题.废话不多说了,直接上代码. Python3.5代码 """重温本科学习过之书籍:计算机科学 ...

  4. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)

    同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...

  5. hanoi塔问题解析(一) c++实现

    什么是hanoi塔? 汉诺塔问题:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上.有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并 ...

  6. 算法分析——Hanoi塔问题

    上图为 3 阶 Hanoi 塔 假设有三个命名为 A B C 的塔座 ,在塔座A上插有n个直径大小不相同,由小到大编号为1 ,2 ,3 ,··· ,n的圆盘,要求将A座上的圆盘移至塔座C 并按同样的顺 ...

  7. 基础算法:Hanoi塔(递归)

    Hanoi塔 "递归算法离不开递推方程的求解." 这里Hanoi塔有三个柱子,A\B\C.上面放着五个盘子,要将A柱的盘子全部移到C柱上: 其中规则: 1.小圆盘必须在大圆盘上面. ...

  8. java hanoi塔问题_Hanoi塔问题 - 智障的个人空间 - OSCHINA - 中文开源技术交流社区...

    Hanoi塔问题--递归方法求解 假设有三个分别命名为x.y.z的圆柱形塔座,在塔座x上插有n个半径大小各不相同,以小到大由上而下编号为1,2,····,n,如图所示.现在要求将X轴上的n个圆盘移至塔 ...

  9. C++ Hanoi塔学习笔记(递归与非递归实现)

    自己学习理解的笔记,欢迎补充. 1.Hanoi塔问题的递归解法 void Hanoi(int n, char a, char b, char c) {if (n == 1) {cout << ...

最新文章

  1. SystemProperities
  2. 百度Apollo:CTO级无人车大牛不稀缺,我们这也就百八十个吧
  3. 动作分析 姿态估计_单人或多人的人体姿态骨架估计算法概述
  4. 东南亚版“QQ 音乐”:JOOX 的音乐推荐重构之路
  5. excel怎么添加diy工具箱_这些Excel插件让你的Excel更好用!
  6. Spark2.x RPC解析
  7. 厉害了,这个省未来5年将投入63亿人民币扶持博士博士后!
  8. python不能保存中文_Python 关于matplotlib无法显示中文字体的解决方法
  9. javascript 技巧总结积累1-108条(正在积累中)
  10. 政府部门和金融行业已成网络攻击的最大目标
  11. Git 本地分支关联远程分支
  12. .NET简谈观察者模式
  13. 微信读书 《围城》笔记
  14. OSPF篇——SPF算法——002
  15. 面试中被问到“为什么从上一个单位离职”怎么回答
  16. Echarts 如何实现一张图现切换不同的X轴
  17. java implode函数_PHP警告:implode():传递的参数无效
  18. 【自制编译器】(一)
  19. 【Pytorch Lighting】第 8 章:自监督学习
  20. php+时间戳+星座,php 根据日期显示星座的简单示例

热门文章

  1. python股票分析论文_股票分析与资产组合(python)
  2. Assemble(王爽)——nasm 和 masm的一些简单区分
  3. jquery 鼠标悬停/移动
  4. promise一脸懵逼...
  5. 音标课件软件测试,宝宝益智英语字母音标(测试版)
  6. Python基础 PyCharm如何新建项目
  7. C++中用 GetModuleFileName()函数 获得程序当前的运行目录
  8. 2019考研政治【韦林】全程班视频
  9. 我的2018年计划-抓重点,出成绩,提高核心竞争力
  10. karma+phantomjs+mocha+chai使用心得