ハノイゲームの[再帰]タワー

オリジナルタイトルポータル

考え


この質問カード私時、私はCODEVSに遭遇した最初の問題であり、そしておそらく実際にそれが本当に料理ああです、QAQ考えることができませんでした、問題の解決策を覗いていません。

主なアイデア

最初の順序は、ハノイCの塔に移動することである
:HANORは三つのステップ実行順序に対応し、N(N> 1)
1. ACBの順にn-1個のオーダーHANORシフト方法を実行
2 A-> Cの最大値からプレート移動
3.実行をBAC配列におけるN-1オーダーHANORシフト法は
明らかである、再帰が終了。

コード


#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;
}

おすすめ

転載: www.cnblogs.com/gongdakai/p/11278464.html