问题 3630 --回旋汉诺塔(完善程序)

3630: 回旋汉诺塔(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 655  解决: 339
[提交][状态][命题人:]

题目描述


非常经典的汉诺塔问题,目标是将A柱上的盘子移到C柱上,但是大的盘子不能放到小的盘上上面。

现在规定:A柱上的盘子只能移到B柱,B只能移到CC只能移到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');
}

输入

一个整数n<=10

输出

每行一步,格式:”%d %c %c”一个数字k和两个字母c1c2,表示把第k个盘子从c1柱移到c2

样例输入
Copy
2
样例输出
Copy
1 A B
1 B C
2 A B
1 C A
2 B C
1 A B
1 B C

提示

来源

[提交][状态]