ハノイ再帰と非再帰的アルゴリズムの[予約]タワー

出典:https://blog.csdn.net/computerme/article/details/18080511

再帰的なアルゴリズム:

/ * 汉诺塔递归算法* / 
書式#include <iostreamの>
 使用して 名前空間はstdを、
// 三つの柱放置し1,2および3の番号を使用
ボイド hanio(int型 N、INT  からINTに、INT {によって)
     場合(N =!1 {)
    hanio(N - 1から、によって、に); 
    hanio(1から、に、0 ); 
    hanio(N - 1、によって、へ、から)。
    } 
    { 
        COUT << " " << から << " 放到" << <<にENDL。
    } 

} 
int型のmain(){
     int型N; 
    cinを >> N; 
    hanio(N、132 )。
    coutの << "  << てendl; 
}
/ * ハノイの塔非再帰的アルゴリズム* / 
の#include <iostreamの>
 使用して 名前空間STD;
 constの INT NMAXである= 64 ;
 構造体柱{
     int型[NMAXである]ストア;
     INT トップ、
     チャー、ラベル
     INT {(トップ)
         を返すトップ- [ストア1 ]; 
    } 
    int型のPOP(){ 
        トップ - ;
         返すストア[トップ]; 
    } 
    ボイドプッシュ(INT X){ 
        ストア[トップ] = X。
        トップ ++ ; 
    } 
}。
ボイド hanio(ピラーSS []、長いN){
      int型のk = 0 int型私= 0 ;
     一方、(K < N){
          int型の TEMP = SS [I%3 ] .pop()。
         SS [(I + 1)%3 ] .push(TEMP)。
         COUT << TEMP << " 号从" << SS [I%3 ] .LABEL << " 移动到" << SS [(I + 1)%3 ] .LABEL << ENDL。 
         K ++ ;
         もし(K < N){
              場合(SS [(I + 2)%3 ] .top()== 0 || SS [(I + 2)%3 ] .top()> SS [(I)%3 ]。トップ()){
              int型の TEMP = SS [(I)%3 ] .pop()。
             SS [(I + 2)%3 ] .push(TEMP)。
             COUT << TEMP << " 号从" << SS [(I)%3 ] .LABEL << " 移动到" << SS [(I + 2)%3 ] .LABEL <<
                      } 
         {
              int型の TEMP = SS [(I + 2)%3 ] .pop()。
             SS [(I) 3 ] .push(TEMP)。
             COUT << TEMP << " 号从" << SS [(I + 2)%3 ] .LABEL << " 移动到" << SS [(I)%3 ] .LABEL << ENDL。
         } 
         K ++ 
         } 
         私は ++します; 
     } 
} 
長いパウ(INT A、INT B){
     長いです ANS = 以下のためにint型 iは= 0 ; iは<B- 1 ; I ++ ){ 
        ANS * = 
    } 
    戻りANS。
} 
ボイド初期化(柱試験[]、int型N){ 
    試験[ 0 ] .LABEL = ' A ' 
    試験[ 0 ] .Top = N。
    試験[ 1 ] .Top =試験[ 2 ] .Top = 0 以下のためにint型 i = 0 ; iがn <; iは++ ){
        試験[
    } 0] .store [I] = N- I。
        試験[ 1 ] .store [I] =試験[ 2 ] .store [I] = 0 ; 
    } 
    もし、(N%2 == 0 ){ 
        試験[ 1 ] .LABEL = ' B ' 
        試験[ 2 ] .LABEL = ' C ' 
    } 
    { 
        テストは[ 1 ] .LABEL = ' C ' 
        試験[ 2 ] .LABEL = ' B ' 
} 
int型メイン(){
     int型のn; 
    cinを >> N; 
    柱の使用[ 3 ]。
    (使用、n)を初期化します。
    長い powAns =パウ(2、n)は- 1 
    hanio(使用、powAns)。
    裁判所未満 << " こんにちは" << てendl; 
}

 

おすすめ

転載: www.cnblogs.com/jiading/p/11456451.html