汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归
1. 汉诺塔问题的提法
汉诺塔问题是使用递归解决问题的经典范例。
传说婆罗门庙里有一个塔台,台上有3根标号为A、B、C的用钻石做成的柱子,在A柱上放着64个金盘,每一个都比下面的略小一点。把A柱上的金盘全部移到C柱上的那一天就是世界末日。
移动的条件是:一次只能移动一个金盘,移动过程中大金盘不能放在小金盘上面。庙里的僧人一直在移个不停,移动的最少总...
分类:
其他好文 时间:
2016-05-23 15:18:17
阅读次数:
178
汉诺塔问题的递归解法:实现程序:#include<iostream>usingnamespacestd;voidmove(intn,chari,charj){ cout<<"把"<<n<<"号从"<<i<<"移动到"<<j<<endl;}voidhanoi(intn,charx,chary,charz){ if(n==1) { move(1,x,z); } else {..
分类:
其他好文 时间:
2016-05-13 15:36:54
阅读次数:
158
程序的来源是参考尹成老师的教学视频,并实践得到结果。
Hanoi的源程序:
#include
#include
#define N 20
int a[N][3] = { 0 };
int count = 0;//计数器
void show(int a[N][3]);//显示作用
void Hanoi(int n, char A, char B, char C);//移动过程,控制
...
分类:
其他好文 时间:
2016-05-12 14:36:04
阅读次数:
209
汉诺塔VII Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 : n=m+p+qa1>a2>...>amb1> ...
分类:
其他好文 时间:
2016-04-23 20:00:29
阅读次数:
250
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 编程 ...
分类:
其他好文 时间:
2016-04-03 23:38:38
阅读次数:
277
第一部分:题目 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下: ...
分类:
Web程序 时间:
2016-03-31 23:16:52
阅读次数:
237
N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上。规则: 当n=1时,直接把盘子由x——>z; 当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现
分类:
编程语言 时间:
2016-03-21 18:08:51
阅读次数:
183
三个汉诺塔算法 f(n)=2^n-1 两个思路大同小异 Frame算法 在1941年,一位名叫J. S. Frame的人在《美国数学月刊》上提出了一种解决四柱汉诺塔问题的算法,这是人们熟知的Frame算法: (1)用4柱汉诺塔算法把A柱上部分的n- r个碟子通过C柱和D柱移到B柱上【F( n- r
分类:
其他好文 时间:
2016-03-16 22:44:10
阅读次数:
264