非常经典的汉诺塔问题,目标是将A柱上的盘子移到C柱上,但是大的盘子不能放到小的盘上上面。
现在规定:A柱上的盘子只能移到B柱,B只能移到C,C只能移到A。
程序要求输出N层汉诺塔(从A柱移到C柱)的最优移动方案
#include<cstdio>
using namespace std;
char next(char x){
return (x=='A')?'B':((x=='B')?'C':'A');
}
void hanoi(int n,char from,char to){
if(n!=0){
if(next(next(from))==to){
char buffer=_____(1)_______;
hanoi(n-1,from,to);
printf("%d %c %c\n",n,from,buffer);
_____(2)_________
printf("%d %c %c\n",n,buffer,to);
hanoi(n-1,from,to);
}
else if(_____(3)_______){
char buffer=next(next(from));
hanoi(n-1,from,buffer);
printf("%d %c %c\n",n,from,to);
______(4)_______
}
}
}
int main(){
int n;
scanf("%d",&n);
hanoi(n,'A','C');
}