0
点赞
收藏
分享

微信扫一扫

汉诺塔问题 SCAU 18983(递归实现)

灵魂跑者 2022-04-16 阅读 9

输入格式

输入为一个整数(小于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;
}

 

举报

相关推荐

0 条评论