【題解】ZeroJudge e446: 排列生成

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e446

【作法-1】遞迴

#include <iostream>
using namespace std;
int N, a[15];
bool used[15];

void solve(int d) {
    if (d > N) {
        for (int i = 1; i <= N; i++) {
            cout << a[i] << " ";
        }
        cout << "\n";
        return;
    }
    for (int i = 1; i <= N; i++) {
        if (used[i]) continue;
        used[i] = true;
        a[d] = i;
        solve(d + 1);
        used[i] = false;
    }
}

int main() {
    cin >> N;
    solve(1);
    return 0;
}

【作法-2】next_permutation( )

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

int main() {
    int N;
    cin >> N;
    int a[N];
    for (int i = 1; i <= N; i++) {
        a[i-1] = i;
    }
    do {
        for (int i = 0; i < N; i++) {
            cout << a[i] << " ";
        }
        cout << "\n";
    } while (next_permutation(a, a+N));
    return 0;
}
分享本文 Share with friends