汉诺塔是一个古典的数学问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
#include <stdio.h>
int p=0;//移动次数
void move(char a,char c){
printf("%d: %c---->%c\n",++p,a,c);
}
void hanoi(int n,char a,char b,char c){
if (n==1){
move(a,c);
return ;//切记 return
}
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
int main(void) {
int x;
scanf("%d",&x);
hanoi(x,'a','b','c');
printf("%d-",p);
return 0;
}