博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++汉诺塔相关知识总结1
阅读量:6902 次
发布时间:2019-06-27

本文共 1027 字,大约阅读时间需要 3 分钟。

困扰已久,难以攻克的汉诺塔总结来啦

Part One 汉诺塔到底是什么呢?

汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。                        --引用维基百科

也就是说把圆盘从一个柱子,移动到另一个柱子,中途需要一个柱子来辅助完成,并且在这个过程中必须遵循“下大上小”的原则。

Part Two常见问题一:打印汉诺塔移动的步骤

那么这一类题应该怎么办呢?

 

接下来详解代码

#include
#include
#include
#include
#include
#include
using namespace std;int n,flag;void move(int x,char A,char B,char C){//x就是代表这是从下往上数(从大往小)第x个圆盘 if(x==0) return; //接下来开始想象你的面前有ABC,3个圆柱 其中第一个圆柱上放着x个圆盘,你想要把他们从第一个圆柱挪到第三个圆柱上 move(x-1,A,C,B);//递归,这一句的意思相当于就是把当前圆盘上面的 x-1 这么一堆较小的圆盘 ,把他们从A挪到B(借助C柱) printf("%c->%c\n",A,C);//然后把它从A挪到C move(x-1,B,A,C);//现在A柱就空出来了,再把原来B上面x-1个圆盘挪到C(借助A) //那么这样子,x个圆盘就都挪到C啦@@@ //有的时候看着这一堆ABC会发蒙 //别慌,把每一次“集体大挪动”都看成是从A挪到C,和第一次x=n是=时的初衷一样;只需要在递归的过程中把ABC分别代表的柱子的字母记录下来,在递归过程中打印即可 }int main(){ cin>>n; move(n,'A','B','C'); return 0;}

哈哈,其实它也不难!

 

 

转载于:https://www.cnblogs.com/Tidoblogs/p/11105040.html

你可能感兴趣的文章
jquery事件机制扩展,jquery鼠标右键事件。
查看>>
windows phone Image checkbox
查看>>
[pycharm]远程调试服务器项目
查看>>
7 Java NIO Selector-翻译
查看>>
rvm 添加 Path
查看>>
All Users in SharePoint Site Custom Webpart
查看>>
pip下载源更换为豆瓣源
查看>>
Java多线程之先行发生原则(happens-before)
查看>>
React Render props
查看>>
自动类型转换
查看>>
C# winfrom 当前程序内存读取和控制
查看>>
电话号码分身
查看>>
Redis持久化方案
查看>>
Unity保存序列化数据
查看>>
测试jupyter notebook导出md格式的兼容性
查看>>
【转】WPF MultiBinding 和 IMultiValueConverter
查看>>
解决springMVC文件上传报错: The current request is not a multipart request
查看>>
Struts2国际化-getText()方法
查看>>
实时监听组件中路由的变化
查看>>
MnasNet:迈向移动端机器学习模型设计的自动化之路
查看>>