问题描述:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
void MoveDisk(int diskID, int srcPole, int destPole)
{
printf("Move disk %d from pole %d to pole %d.\n", diskID, srcPole, destPole);
}
void Hanoi(int numDisk, int srcPole, int destPole, int midPole)
{
if(numDisk <= 0)
return;
Hanoi(numDisk-1, srcPole, midPole, destPole);
int diskID = numDisk;
MoveDisk(diskID, srcPole, destPole);
Hanoi(numDisk-1, midPole, srcPole, destPole);
}