汉诺塔游戏
来源:互联网 发布:scada数据集 编辑:程序博客网 时间:2024/05/16 14:26
题目描述 Description
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。
游戏中的每一步规则如下:
1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方)
2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小的盘子)
如对于n=3的情况,一个合法的移动序列式:
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C
给出一个数n,求出最少步数的移动序列
输入描述 Input Description
7
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。
游戏中的每一步规则如下:
1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方)
2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小的盘子)
如对于n=3的情况,一个合法的移动序列式:
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C
给出一个数n,求出最少步数的移动序列
输入描述 Input Description
一个整数n
第一行一个整数k,代表是最少的移动步数。
接下来k行,每行一句话,N from X to Y,表示把N号盘从X柱移动到Y柱。X,Y属于{A,B,C}
3
7
1 from A to C
2 from A to B
1 from C to B
3 from A to C
1 from B to A
2 from B to C
1 from A to C
#include <iostream>using namespace std;void Move(char a, char b, char c, int num){ if (num == 1) cout << num << " from " << a << " to " << c << endl; else { Move(a, c, b, num - 1); cout << num << " from " << a << " to " << c << endl; Move(b, a, c, num - 1); }}int main(){ int n; cin >> n; int result = 1; for (int i = 0; i < n; i++) result *= 2; cout << result - 1 << endl; Move('A', 'B', 'C', n); return 0;}
0 0
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 汉诺塔游戏
- 求助! java游戏“汉诺塔”
- 汉诺塔游戏的设计
- 汉诺塔游戏研究
- wikioi p3145 汉诺塔游戏
- 模拟汉诺塔游戏
- wikioi 3145 汉诺塔游戏
- [Wikioi 3145]汉诺塔游戏
- wikioi汉诺塔游戏c
- 汉诺塔游戏求解
- CODEVS 3145 汉诺塔游戏
- 《CTCI》3.4 汉诺塔游戏
- javascript中数组的定义及使用
- 如何创建一个简单的C++同步锁框架(译)
- 高考后的BB
- 关于宏##的使用注意一点
- 等别人一起去包夜时的BB
- 汉诺塔游戏
- 将博客搬至CSDN
- 自言自语
- 吹きすさぶ风の中で
- 2014-07-18 日志
- 银魂 - 阴天
- 自言自语
- Code First Migrations更新数据库结构的具体步骤
- 【转载自mos中文文章】如何下载并运行Oracle数据库预升级实用程序 (Doc ID 1577379.1)