解决Hanoi塔
发布时间
阅读量:
阅读量
Hanoi塔问题
问题描述 :
假设存在三个分别标记为 A、B、C 的塔座,在塔座 A 上依次叠放着 n 个直径大小各异且自上而下编号依次为 1,2,...,n 的圆盘片。现要求通过移动操作将这些圆盘片从塔座 A 移至塔座 C 上,并且必须保持原有顺序叠加的排列方式。移动规则如下:
(1)每次操作只能转移一个圆盘片;
(2)圆盘片可以在三个目标塔座中的任意一个上存放;
(3)任何时候都不能将一个较大的圆盘片放置于较小的圆盘片之上。
- 通过递归步骤(recursive steps),用于移动依次编号从 1 到 n-1 的圆盘自 A 移动至 B,并以 C 作为辅助塔。
- 单独地(separately)将编码为 n 的圆盘从 A 移动至 C。
- 再次使用递归方法(recursive methods),用于移动依次编号从 1 到 n-1 的圆盘自 B 移动至 C,并以 A 作为辅助塔。
算法描述 :
//将塔座 A 上的 n 个圆盘按规则搬到 C 上,B做辅助塔
void Hanoi(int n, char A, char B, char C){
if(n == 1){
move(A, 1, C); //将编号为 1 的圆盘从 A 移到 C
return
全部评论 (0)
还没有任何评论哟~
