题目描述:输出自然数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 <iostream>
#include <algorithm>
using namespace std;
void dfs(int a[],int k,int n) { //n表示长度,k表示目前下降深度
int i;
if (k == n-1){ //下降深度为n-1时只有一种情况则输出
for (i = 0; i < n; i++) {
if (i == n - 1)
cout << a[i] << endl;
else cout << a[i]<<" ";
}
return;
}
for (i = k; i < n; i++)
{ if (i!=k)
swap(a[i], a[k]);//swap交换
dfs(a, k+1,n);
if (i != k)
swap(a[i], a[k]);//复原操作
}
}
int main() {
int n ,i,k=0;
int a[10];
cin >> n;
for (i = 0; i < n; i++) {
a[i] = i + 1;
}
dfs(a, k, n);
return 0;
}