题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
输入 n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字占5列。
样例输入 Copy
4
样例输出 Copy
1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 1 4 3 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1
#include <iostream>
using namespace std;
int const N=5e5;
int a[N],n;
int step=1,used[N];
void dfs(int step){
if(step>n) { //到达边界状态,输出
for(int j=1;j<=n;j++){
cout<<" "<<a[j];
}
cout<<endl;
return;
}
else for(int i=1;i<=n;i++){
if(!used[i]){ //如果i号扑克牌仍在手中
a[step]=i; //将i号扑克牌放进第step个盒子
used[i]=1; //标记i号扑克牌已不在手中
dfs(step+1); //继续尝试第step+1个盒子
used[i]=0; //取回刚刚尝试的那张牌
}
}
}
int main(){
cin>>n;
dfs(1);
}