编辑代码

#include <iostream>
#include <algorithm>

using namespace std;

#define MAX_N 10

bool used[MAX_N];
int perm[MAX_N];

void permutation1(int pos, int n); // 求 {0, 1, 2, 3} 的3!种排列 6种
void permutation2(int n); // 使用next_permutation()
int main() {
    // permutation1(0, 3); // 等价于permutation2(5)
    permutation2(2);
    // 0 1 
    // 1 0
}
void permutation1(int pos, int n) {
    if (pos == n) {
        // 对perm2的操作
        for (int i = 0; i < n; i++) {
            cout << perm[i] << " ";
        }
        cout << endl;
        return ;
    }

    for (int i = 0; i < n; i++) {
        if (!used[i]) {
            perm[pos] = i;
            used[i] = true; // i已经被使用了
            permutation1(pos + 1, n);
            used[i] = false; // 返回之后标志复位
        }
    }
    return ;
}

int perm2[MAX_N];
void permutation2(int n) {
    for (int i = 0; i < n; i++) {
        perm2[i] = i;
    }
    do {
        // 对perm2的操作
        for (int i = 0; i < n; i++) {
            cout << perm2[i] << " ";
        }
        cout << endl;
    } while (next_permutation(perm2, perm2 + n)); // 所有排列生成后next_permutation会返回false
    return ;
}