汉诺塔(梵塔)问题
2015-11-20 21:39
183 查看
汉诺塔(梵塔)问题几乎是所有的初学编程的人遇到的问题,这个问题很好的运用了递归的特性,将原来看起来不好解决的问题变得异常简单,而且很容易理解。问题所有的人都知道就不描述了,代码很简单且有注释就不解释了
PS:这个问题很简单,但是突然想到如果这个问题不是只有3个柱子,而是要求输入有n个圆盘,有m个柱子可以用,应该怎么做。通过大于3个的柱子容易证明必然会得到更好的解,也就是解随柱子的个数是单调不升的。
最开始以为会和原问题差不多的简单,但是后来写了几个递推式看了一下都不对,太晚了,有空再想想吧
#include<iostream> using namespace std; int cnt=1; //step计数 void hanoi(int n,char A,char B,char C); int main() { int n; char A,B,C; cout<<"3个柱子编号A B C,将圆盘从A借助C移到B,输入圆盘个数"<<endl; cin>>n; A='A'; B='B'; C='C'; hanoi(n,A,B,C); //将n个圆盘从A借助C移动到B return 0; } void hanoi(int n,char A,char B,char C) { if(n==1) //如果只有一个圆盘,直接移动就可以了 cout<<cnt++<<" "<<A<<"-->"<<B<<endl; else{//大于一个圆盘时,先将前n-1个移到C上,然后将最后一个移到B上,最后再把C上的n-1个圆盘移到B上 hanoi(n-1,A,C,B); cout<<cnt++<<" "<<A<<"-->"<<B<<endl; hanoi(n-1,C,B,A); } }
PS:这个问题很简单,但是突然想到如果这个问题不是只有3个柱子,而是要求输入有n个圆盘,有m个柱子可以用,应该怎么做。通过大于3个的柱子容易证明必然会得到更好的解,也就是解随柱子的个数是单调不升的。
最开始以为会和原问题差不多的简单,但是后来写了几个递推式看了一下都不对,太晚了,有空再想想吧
相关文章推荐
- ios9中使用UIWebView时的一个问题。
- 关于用网线连开发板和电脑网卡问题
- IIS教程:因权限问题被拒绝访问的解决方案
- UIPasteboard的使用
- 动画效果
- 多线程卖火车票
- IIS注册.NET
- openstack HA配置-Mysql
- ASP.NET-MVC4-05-Views
- ios程序的 .pch 文件丢失后
- 求二元一次方程的根(浮点数输出)
- 左侧固定,右侧宽度自适应
- hdoj 数据的交换输出
- Weblogic Security Realm:weblogic安全领域及账号管理实用工具剖析
- 1101. Quick Sort (25)
- 1101. Quick Sort (25)
- vSphere搭建虚拟化集群环境:二 vSphere5.5主要虚拟化产品安装
- 长见错误
- Unity3D 关于刚体(RigitBody)与碰撞体(Collider)的探索
- LightOJ 1013 - Love Calculator