题目描述
输出自然数1~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
来源
搜索专题
写在前面
很多问题不要想得太难,可以试着自己先动手一点一点解决,并且好好地坚持。
AC_code
C++版
#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;
}
Python版
a = [0 for i in range(15)]
b = [0 for i in range(15)]
n = int(input())
def println():
for i in range(1, n + 1):
if i == 1:
print(a[i], end='')
else:
print('', a[i], end='')
print()
def dfs(i):
if i == n + 1:
println()
return
for j in range(1, n + 1):
if b[j] == 0:
a[i] = j
b[j] = 1
dfs(i + 1)
b[j] = 0
dfs(1)