汉诺塔问题 Hanoi C++
2012-10-09 13:52
232 查看
Hanoi问题:
设a,b,c是三个塔座,在a上一共堆叠这n个圆盘,这些圆盘由大到小叠在一起,现在要求将塔座a上的圆盘全部移动到b上去,移动时须遵守以下规则:
1.每次只能移动一个圆盘;
2.任何情况,都不允许较大的盘子压在较小的盘子之上;
3.在满足1,2的情况下,可将圆盘移至a,b,c任意一个塔座上.
算法简介:
当塔上圆盘个数n>1时,需要利用c作为辅助塔。可将n-1个圆盘依照移动规则从塔a移动至塔c,然后将剩下的最大的圆盘移动至塔b,再将n-1个圆盘从塔c移动至塔b即可。
依照以上思想,n个圆盘的问题可以分解为两个n-1个圆盘的同样问题来解决。
一下是输出移动步奏的代码..
设a,b,c是三个塔座,在a上一共堆叠这n个圆盘,这些圆盘由大到小叠在一起,现在要求将塔座a上的圆盘全部移动到b上去,移动时须遵守以下规则:
1.每次只能移动一个圆盘;
2.任何情况,都不允许较大的盘子压在较小的盘子之上;
3.在满足1,2的情况下,可将圆盘移至a,b,c任意一个塔座上.
算法简介:
当塔上圆盘个数n>1时,需要利用c作为辅助塔。可将n-1个圆盘依照移动规则从塔a移动至塔c,然后将剩下的最大的圆盘移动至塔b,再将n-1个圆盘从塔c移动至塔b即可。
依照以上思想,n个圆盘的问题可以分解为两个n-1个圆盘的同样问题来解决。
一下是输出移动步奏的代码..
#include<iostream> usingnamespacestd; voidHanoi(intn,chara,charb,charc); voidMove(intn,chara,charb); intmain() { Hanoi(3,'a','b','c');//传说完成移动64层的汉诺塔,宇宙就终结了,有没有兴趣试试... return0; } voidHanoi(intn,chara,charb,charc) { if(n>0) { Hanoi(n-1,a,c,b); Move(n,a,b); Hanoi(n-1,c,b,a); } } voidMove(intn,chara,charb) { cout<<a<<"-->"<<b<<endl; }
//-----------------------------------procrustes--2012.10.09
相关文章推荐
- 学习C/C++语言:递归求解hanoi汉诺塔问题
- 汉诺塔(hanoi)问题C代码实现
- 汉诺塔问题C++递归算法
- WINAPI 汉诺塔问题Hanoi Problem
- C++实现汉诺塔问题
- C++ 关于单色汉诺塔问题
- Hanoi--汉诺塔问题
- 汉诺塔问题(Hanoi问题)的递归算法与非递归算法详解
- 简单递归—Hanoi(汉诺塔问题)
- 百练OJ:4147:汉诺塔问题(Hanoi)——python实现汉诺塔
- python 汉诺塔问题(Tower of Hanoi Puzzle)
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Acdream 1219 The Towers of Hanoi Revisited(递归汉诺塔问题)
- 汉诺塔问题(c++实现)
- c语言经典问题:汉诺塔 Hanoi问题
- 汉诺塔问题(Towers of Hanoi)
- C++基于递归算法解决汉诺塔问题与树的遍历功能示例
- C++| n阶汉诺塔问题(递归)
- 汉诺塔(Hanoi)问题
- noip2007 Hanoi双塔问题 (动态规划,汉诺塔问题,高精乘低精)