再帰アルゴリズムの完全な配列

問題

仮定し  {1, 2, 3, ... n} 、このシーケンスのすべての完全な配列を見つけ、このようなシーケンスを。

解決のアイデア

まず、あるn個の第1は、n残りを解決することで後に決定の可能性、 - 配列データの問題なので、あなたが問題を打破することができ、終了条件である配列の終わりまで、ダウンしています。

(非再帰的)の最初のビット配列

2. 3. 1 
2 1 3 
3 1 2 

反復配列エレメント、テストシーケンス{1,2,3}の問題を考慮してい
#include <iostreamの>
 使用して 名前空間STD;
 ボイドパーマ(INTリスト[]、INT  からINT N-)
{ 
    ためINT I = から、I <N - 、I ++ 
    { 
        スワップ(リスト[ から]、リスト[I]) ;
         // フル1出力装置交換
        のためにINT I = 0 ; I <N-I ++ 
            COUT <<リスト[I] << "  " ; 
        COUT << ENDLを;
         // 交換順序を保証する前または{1、 2、3}
        スワップ([リストから]、リスト[I])。
   
    } 
} 
int型のmain()
{ 
    int型のリスト[] = { 123 }。
    パーマ(リスト、03 )。
    リターン 0 ; 
}

 

全ての配列(再帰2号、3号)

1 2 3 
1 2 3 
2 1 3 
2 1 
3 2 1 
3 1 2
#include <iostreamの>
 使用して 名前空間STD;
 ボイドパーマ(INTリスト[]、INT  からINT N-)
{ 
    // ループ終了条件
    IFから == N-)
    { 
        // フル1出力装置を交換
        するためのINT I = 0、I <N - 、I ++ 
            COUT <<リスト[I] << "  " ; 
        COUT << ENDL;
         リターン; 
    } 
    ためINT I = から; I <N-; I ++ 
    { 
        [スワップ(リストから、リスト] [I]);
         // 追加再帰 
        パーマ(一覧から + 1 、N-);
         // 交換順序を保証する前または{1、2、3 } 
        スワップ([リストから]、リスト[I]); 
    } 
} 
int型のmain()
{ 
    int型のリスト[] = { 123 }; 
    パーマ(リスト、03 );
     戻り 0 ; 
}

おすすめ

転載: www.cnblogs.com/zhongweizi/p/12465240.html