2005
11-17

规则1:每次只能移动一个圆盘
规则2:任何时候都不允许将较大的圆盘压在较小的圆盘上
规则3:在满足移动规则1和2的前提下,可将圆盘移动到A,B,C中任一塔座上

假设塔座A,B,C排成一个三角形,A->B->C->A构成一顺时针循环.在移动圆盘的过程
中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的下一塔座上;若是偶数移
动,则保持最小的圆盘不动.而在其它两个塔座之间,将较小的圆盘移动到另一塔座
上.


Hanoi塔的递归算法:
void Hanoi(int n,int A,int B,int C)
{
 if(n>0)
 {
  Hanoi(n-1,A,C,B);
  Move(n,A,B);
  Hanoi(n-1,C,B,A);
 }
}


其中,Hanoi(n,A,B,C)表示将塔座A上的n个圆盘依移动规则移动到塔座B上,C为辅助
塔座,Move(n,A,B)表示将塔座A上编号为n的圆盘移动到塔座B上.


留下一个回复