【遞歸】漢諾塔遊戲

原題傳送門ios

思路


這道題卡了我一個小時,是我在CODEVS上遇到的第一道難題,不偷看一眼題解的話可能真的想不出來QAQ,本身是真的菜啊。spa

主要思路

一階漢諾塔就是把A移動到C
而n(n>1)階漢諾塔至關於執行了三大步驟:
1.在ACB的順序下執行了n-1階漢諾塔的移法
2.從A->C移動了最大盤
3.在BAC的順序下執行了n-1階漢諾塔的移法
很明顯,遞歸就完了。code

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;
}
相關文章
相關標籤/搜索