[CareerCup] 3.4 Towers of Hanoi 汉诺塔
3.4 In the classic problem of the Towers of Hanoi, you have 3 towers and N disks of different sizes which can slide onto any tower. The puzzle starts with disks sorted in ascending order of size from top to bottom (i.e., each disk sits on top of an even larger one). You have the following constraints:
(1) Only one disk can be moved at a time.
(2) A disk is slid off the top of one tower onto the next tower.
(3) A disk can only be placed on top of a larger disk.
Write a program to move the disks from the first tower to the last using stacks.
经典的汉诺塔问题,记得当年文曲星流行的日子,什么汉诺塔啊,英雄坛说啊,华容道啊,都是文曲星上的经典游戏,当时还觉得汉诺塔蛮难玩的,大学里学数据结构的时候才发现原来用递归这么容易解决。那么我们来看看用递归如何实现:
aaarticlea/jpeg;base64,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" alt="" width="352" height="129" />
假如n = 1,直接将Disk 1移到Tower C即可
假如n = 2,需要三步:
1. 把Disk 1 从Tower A 移到 Tower B
2. 把Disk 2 从Tower A 移到 Tower C
3. 把Disk 1 从Tower B 移到 Tower C
假如n = 3,需要如下几步:
1. 我们首先把上面两层移到另一个位置,我们在n = 2时实现了,我们将其移到 Tower B
2. 把Disk 3 移到Tower C
3. 然后把上面两层移到Disk 3,方法跟n = 2时相同
假如n = 4,需要如下几步:
1. 把Disk 1, 2, 3 移到 Tower B,方法跟n = 3时相同
2. 把Disk 4 移到 Tower C
3. 把Disk 1, 2, 3 移到 Tower C
这时典型的递归方法,实现方法参见下面代码:
class Tower {
public:
Tower(int i) : _idx(i) {}
int index() { return _idx; }
void add(int d) {
if (!_disks.empty() && _disks.top() <= d) {
cout << "Error placing disk " << d << endl;
} else {
_disks.push(d);
}
}
void moveTopTo(Tower &t) {
int top = _disks.top(); _disks.pop();
t.add(top);
cout << "Move disk " << top << " from " << index() << " to " << t.index() << endl;
}
void moveDisks(int n, Tower &destination, Tower &buffer) {
if (n > ) {
moveDisks(n - , buffer, destination);
moveTopTo(destination);
buffer.moveDisks(n - , destination, *this);
}
}
private:
stack<int> _disks;
int _idx;
};
int main() {
int n = ;
vector<Tower> towers;
for (int i = ; i < ; ++i) {
Tower t(i);
towers.push_back(t);
}
for (int i = n - ; i >= ; --i) {
towers[].add(i);
}
towers[].moveDisks(n, towers[], towers[]);
return ;
}
[CareerCup] 3.4 Towers of Hanoi 汉诺塔的更多相关文章
- 理解 Hanoi 汉诺塔非递归算法
汉诺塔介绍: 汉诺塔(港台:河内塔)是根据一个传说形成的数学问题: 最早发明这个问题的人是法国数学家爱德华·卢卡斯. 传说越南河内某间寺院有三根银棒,上串 64 个金盘.寺院里的僧侣依照一个古老的预言 ...
- 使用函数的递归调用来解决Hanoi(汉诺)塔问题。
#include<stdio.h> void hanoi(int n, char x, char y, char z); void move(char x, char y); int ti ...
- Hanoi汉诺塔问题——递归与函数自调用算法
题目描述 Description 有N个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱子上无盘子),但绝不允 ...
- 《hanoi(汉诺塔)问题》求解
//Hanoi(汉诺)塔问题.这是一个古典的数学问题,用递归方法求解.问题如下: /* 古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上. 有一个老和 ...
- HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
在这里我们将构造一个基于HT for Web的HTML5+JavaScript来实现汉诺塔游戏. 汉诺塔的游戏规则及递归算法分析请参考http://en.wikipedia.org/wiki/Towe ...
- 汉诺塔-Hanoi
1. 问题来源: 汉诺塔(河内塔)问题是印度的一个古老的传说. 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵 ...
- 汉诺塔 Hanoi Tower
电影<猩球崛起>刚开始的时候,年轻的Caesar在玩一种很有意思的游戏,就是汉诺塔...... 汉诺塔源自一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度 ...
- [js - 算法可视化] 汉诺塔(Hanoi)演示程序
前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...
- 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...
随机推荐
- IOS之UIImageView--小实例项目--带音效的拳皇动画
内容大纲: 1.初步工作 2.开始敲代码 3.注意 4.可能遇到的错误 5.设置音频速率在代码顺序上的注意点 带音效的拳皇动画实例项目 初步工作 1.新建一Objective-C工程之后,将需要的拳皇 ...
- Effective Java 25 Prefer lists to arrays
Difference Arrays Lists 1 Covariant Invariant 2 Reified at runtime Erased at run time 3 Runtime type ...
- hdu 4607 Park Visit 求树的直径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n) ...
- Java + eclipse + awt 编写锻炼打字小软件(未完成)
进入前界面: import java.awt.*; public class Welcome extends JFrame implements Runnable{ Thread t; private ...
- mac svn 终端操作命令
svn 删除目录命令 svn 提交命令 svn commit -m zenggui 出来要提交的目录后,按shift + : + q 如遇到不明白的可以输入:svn help 比如想查询删除命令的使用 ...
- appium 常用api介绍(2)
前言:接着上一篇继续讲常用的一些api 参考博文:http://blog.csdn.net/bear_w/article/details/50330565 1.send_keys send_keys( ...
- Ubuntu 安装libusb
执行以下指令 sudo apt-get install libusb-dev sudo apt-get install libusb-1.0-0-dev
- 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)
剪切区域也称为可视区域,是由画布进行设置的:它指的是在画布上设置一块区域,当画布一旦设置了可视区域,那么除此区域外,绘制的任何内容都将看不到:可视区域可以是圆形.矩形等等. 画布提供了三种设置可视区域 ...
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- 二分+动态规划 POJ 1973 Software Company
Software Company Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1112 Accepted: 482 D ...