首页 > 其他 > 详细

【递归】汉诺塔游戏

时间:2019-08-21 20:33:11      阅读:105      评论:0      收藏:0      [点我收藏+]

原题传送门

思路


这道题卡了我一个小时,是我在CODEVS上遇到的第一道难题,不偷看一眼题解的话可能真的想不出来QAQ,自己是真的菜啊。

主要思路

一阶汉诺塔就是把A移动到C
而n(n>1)阶汉诺塔相当于执行了三大步骤:
1.在ACB的顺序下执行了n-1阶汉诺塔的移法
2.从A->C移动了最大盘
3.在BAC的顺序下执行了n-1阶汉诺塔的移法
很明显,递归就完了。

Code


#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<stack>
using namespace std;

int n,k=1,i;

inline void move(int lv,char A,char C)
{
    cout<<lv<<" from "<<A<<" to "<<C<<endl;
}

void h(int lv,char A,char B,char C)
{
    if(lv==1)
        move(lv,A,C);
    else
    {
        h(lv-1,A,C,B);
        move(lv,A,C);
        h(lv-1,B,A,C);
    }
}

int main()
{
    cin>>n;
    for(i=1;i<=n;i++)k*=2;
    cout<<k-1<<endl;
    h(n,'A','B','C');
    return 0;
}

【递归】汉诺塔游戏

原文:https://www.cnblogs.com/gongdakai/p/11278464.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!