[2-4]第二章の例順列問題

Nデジタル入力、それはすべての順列を出力します

[説明]


全体的なアイデアは、数を生成することで整列
①->数は、プログラム番目の第一の位置(N-1)でそれを置き換えるために選んだN-1桁の裏面。から
②世代数n-1の背後に配置されています。
このステップは、両者を繰り返す
(すなわち[]配列方法に有用な方法は以前よりフラグ感じで)

[コード]

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 10;

int n;
int a[N+10];
int cnt = 0;

void dfs(int k,int m){
    if (k==m+1){
        cout<<++cnt<<":";
        for (int i = 1;i <= m;i++){
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return;
    }
    for (int i = k;i <= m;i++){
        swap(a[k],a[i]);
        dfs(k+1,m);
        swap(a[k],a[i]);
    }
}

int main(){
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    dfs(1,n);
    return 0;
}

おすすめ

転載: www.cnblogs.com/AWCXV/p/11618636.html