C/C++再帰アルゴリズムを用いてハノータを実現

1238 ワード

ハノータの原理解析:
皿が一つしかない場合は、Aタワーの上の皿からCタワーに移すだけです.
Aタワーに2つの皿がある場合は、まずAタワーの上の1番皿(番号を上から下に)をBタワーに移動し、Aタワーの上の2番皿を移動するCタワーに、最後にBタワーの上の小皿をCタワーに移動します.
Aタワーに3つの皿がある場合は、まずAタワーの番号1から2の皿(計2個)をBタワー(Cタワーを借りる必要がある)に移動し、その後、Aタワーの3番の最大の皿をCタワーに移動し、最後にBタワーの2つの皿をAタワーを介してCタワーに移動する.
Aタワーにn個の皿がある場合は、まずAタワーの番号1からn-1の皿(合計n-1個)をBタワー(Cタワーを借りて)に移動し、その後、Aタワーの最大のn号皿をCタワーに移動し、最後にBタワーのn-1の皿をAタワーを借りてCタワーに移動する.
以上のように、皿が1つしかない場合は他の塔を借りる必要がない以外は、いずれも同じである.
#include 
using namespace std;
int hannuota(int n,string a,string b,string c)
{
    if(n==1)
    {
        //                            
        printf(" %s------> %s
",a.c_str(),c.c_str()); } else{ //1. n-1 hannuota(n-1,a, c, b); //2. printf(" %s------> %s
",a.c_str(),c.c_str()); //3. hannuota(n-1, b, a, c); } return 1; } int main(int argc, const char * argv[]) { printf(" :
"); int n; scanf("%d",&n); printf(" :
"); hannuota(n,"A","B","C"); return 0; }