問題
仮定し {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型のリスト[] = { 1、2、3 }。 パーマ(リスト、0、3 )。 リターン 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型のリスト[] = { 1、2、3 }; パーマ(リスト、0、3 ); 戻り 0 ; }