いくつかの方法の完全な配列

 

図1に示すように、バックトラック+(出力辞書式順序)の構成

ボイドプリント(){
     int型Iは、
     のための(I = 1 ; I <= N; I ++の
        COUTが <<成る[I] << '  ' ; 
    COUT << ENDL; 
} 
ボイド DFS(INT K){ // ディープ検索関数は、現在のフレームがk個である
    INT I、
     IF(N-Kの==){ // ときに充填 
        プリント(); // 出力電流溶液
        リターン; 
    } 
    ための(I = 1 ; I <= N; I ++)は{ // 1-Nフィルサイクル数
        IF(!ファック[I]){ //現在の数を使用しない場合 
            性交[i]は= 1 ; // タグのクリックが 
            構成され[K +は1 ] = Iであり; // この数移入配列は 
            DFS(K +は、1。); // 次の記入 
            性交を[I] = 0 ; // バック
        } 
    } 
}

2、深い検索(出力辞書順)

書式#include <iostreamの> 
書式#include <stdio.hに> 
する#include <ベクトル>
 使用して 名前空間はstdを、

int型N; 
ベクトル < int型 > 編曲。

ボイド DFS(ベクトル< 整数 > ANS、int型K){
     もし(K == N){
         ためint型 i = 0 ; iがNを<; iは++ ){
             COUT << ANS [I] << '「。
        } 
        COUT << ENDL。
        返します
    } 

    のためのINTI = K。私はNを<; I ++ ){ 
        スワップ(ANS [i]は、ANS [K])。
        DFS(ANS、K + 1 )。
    } 
} 

int型のmain(){ 
    CIN >> N。
    以下のためにint型 i = 0 ; iがNを<; iは++ ){ 
        arr.push_back(I + 1 )。
    } 

    DFS(ARR、0 );
    リターン 0 ; 
}

 

3、または深い検索(非辞書順

オーダーのうちこの出力は、辞書ではありません非常に奇妙な順序です。

書式#include <iostreamの> 
の#include <fstreamの>
 使用して 名前空間はstdを、

int型 ARR [ 10 ]。
ボイドプロセス(int型 K、int型N){
     場合(K == N){
         ためint型 i = 1 ; iがn = <; iは++ ){ 
            COUT << ARR [I] << '  ' 
        } 
        COUT << ENDL。
        返します
    } 
    のためにint型 I = kは、iが++; iが<= N){
        スワップ(ARR [I]、ARR [K])。
        工程(K + 1 、N)。
        スワップ(ARR [I]、ARR [K])。
    } 
} 
int型のmain(){ 
    fstreamのフィン(" data.in " )。
    int型のn; 
    フィン >> N;
    以下のためにint型 iは= 1 ; iがn = <; iは++ ){ 
        ARR [I] = I。
    } 
    プロセス(1 、N)
}

4、C ++ algoritgm next_permutation(出力辞書式順序)

書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <fstreamの>
 使用して 名前空間はstdを、
int型 ARR [ 10 ]。
INT メイン(){ 
    fstreamのフィン(" data.in " )。
    int型のn; 
    フィン >> N;
    以下のためにint型 iは= 1 ; iがn = <; iは++ ){ 
        ARR [I] = I。
    } 
    一方(next_permutation(ARR + 1、ARR + N + 1 )){
         ためINTI = 1 ; I <= N。私は++ ){ 
            COUT << ARR [I] << '  ' 
        } 
        COUT << ENDL。
    } 
}

 

おすすめ

転載: www.cnblogs.com/caozicheng1999/p/11519968.html