汉诺塔问题

来源:互联网 发布:淘宝棉麻女装 编辑:程序博客网 时间:2024/06/09 22:49
问题描述:
有三根杆子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);}