【问题描述】
输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
【输入格式】
一个整数n(1≤n≤9)
【输出格式】
按照字典序的顺序输出由 1~n 组成的所有不重复的数字序列,每行一个序列。
【输入样例】
3
【输出样例】
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
代码:
#include <bits/stdc++.h>
using namespace std;
const int Max_num = 15;
int a[Max_num], b[Max_num];
int n;
void println() {
for (int i = 1; i <= n; i++) {
if (i == 1)
cout << a[i];
else
cout << " " << a[i];
}
cout << endl;
}
void dfs(int i) {
if (i == n + 1) {
println();
return;
}
for (int j = 1; j <= n; j++) {
if (b[j] == 0) {
a[i] = j;
b[j] = 1;
dfs(i + 1);
b[j] = 0;
}
}
}
int main() {
cin >> n;
dfs(1);
return 0;
}