题目描述
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子a上,从下往上按照大小顺序摞着n片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子c上,移动过程中可以借助b柱。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
**问:**如何用最少的步数实现n个盘子的移动?请输出具体的移动方案。
输入格式
一行一个正整数n, 1≤n≤18
1≤n≤18。
输出格式
输出若干行,第i行表示第i步的移动方案。具体格式参见输出样例。
样例数据
intput
3
output
A->C
A->B
C->B
A->C
B->A
B->C
A->C
code<代码>
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char b,char c)//起点a 终点c 过度b
{
if(n==0) return;
hanoi(n-1,a,c,b);
printf("%c->%c\n",a,c);
hanoi(n-1,b,a,c);
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}