规则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上.
>> 本文固定链接: http://www.vcgood.com/archives/119