逻辑问题:汉诺塔
来源:互联网 发布:gprs网络调试 编辑:程序博客网 时间:2024/05/29 06:47
汉诺塔:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
- 每次只能移动一个圆盘;
- 大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
问:如何移?最少要移动多少次?
为了解决这个问题,不妨假设已经知道怎样移动N-1个圆环了。现在,为了把起点盘上的圆环移动到目标盘,需要做如下操作:
1、把N-1个圆环从起点盘移动到(当前)没有任何圆环的过度盘;
2、把最后一个圆环从起点盘移动到目标盘;
3、把N-1个圆环从国度盘移动到目标盘(模仿1和2的操作方法来实现)。
参考图:
三个圆盘的汉诺塔
四个圆盘的汉诺塔:
C++实现汉诺塔算法的程序:
#include <iostream>
#include <cstdio>
using namespace std;
void hannoi (int n, char A, char B, char C) // 把A盘里面的圆圈转移到C盘里面【A--C】。
{
if (n == 1)
{
cout << "移动圆圈" << n << "从盘" << A << "盘" << C << endl; //把最后一个圆环从起点盘移动到目标盘。
}
else
{
hannoi (n-1, A, C, B); // 把N-1个圆环从起点盘移动到(当前)没有任何圆环的过度盘;通过B、C盘在此函数调用中调用位置的互换,来实现把N-1个圆环从A盘到B盘的转移【A--B】。
cout << "移动圆圈" << n << "从盘" << A << "盘" << C << endl;
hannoi (n-1, B, A, C); // 把N-1个圆环从国度盘移动到目标盘(模仿1和2的操作方法来实现);通过A、B盘在此函数调用中位置的互换,来实现N-1个圆环从B盘到C盘的转移【B--C】。
}
}
int main()
{
int n;
cin >> n;
hannoi (n, 'a', 'b', 'c');
system("pause");
return 0;
}
- 逻辑问题:汉诺塔
- 逻辑问题
- 逻辑问题
- 逻辑问题
- 【逻辑】称球问题
- 程序中的逻辑问题
- 硬盘逻辑锁问题
- 业务逻辑分离问题
- 选路逻辑问题
- 一些逻辑的问题
- 一些逻辑问题思考
- 关于逻辑读问题
- 逻辑或||注意问题
- 谁是罪犯逻辑问题
- 关于“短路逻辑”问题
- 并发问题---逻辑混乱
- 逻辑回归问题
- c++ || && 逻辑短路问题
- 字符串的最小表示法和最大表示法
- python日积月累之None和设置编码
- 2609HDU
- java学习之Map集合
- Rsa私钥生成
- 逻辑问题:汉诺塔
- 解析Linux内核获取当前进程指针的方法
- UIday1801:沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager
- ffmpeg的烂坑
- reason: '-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xbffffffffffff9a3
- Android设备唯一性判断
- 算法导论 使用两个队列实现一个栈
- 2016中科院推免
- caffe示例实现之7Flask web服务器上的图像分类demo