输入格式
输入为一个整数(小于20)后面跟三个单字符字符串。 整数为盘子的数目,后三个字符表示三个杆子的编号。
输出格式
输出每一步移动盘子的记录。一次移动一行。 每次移动的记录为例如 a->3->b 的形式,即把编号为3的盘子从a杆移至b杆。
解题思路:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
/*
第一步:
把n-1个模块从塔1移动到塔2
把第n个模块从塔1移动到塔3
第二步:
把n-1个模块从塔2移动到塔3
*/
void Hanoi(int n,char a,char b, char c)
{
if(n==1)
{
printf("%c->1->%c\n",a,c);
}
else
{
Hanoi(n-1,a,c,b);//塔1移动到塔2
printf("%c->%d->%c\n",a,n,c);//把第n个模块从塔1移动到塔3
Hanoi(n-1,b,a,c);//把n-1个模块从塔2移动到塔3
}
}
int main()
{
int n=0;
char a,b,c;
cin>>n>>a>>b>>c;
Hanoi(n,a,c,b);
return 0;
}