///法一:递归实现
#include <bits/stdc++.h>
using namespace std;
const int maxn=21;
int n,p[maxn],hashTable[maxn]={false}; ///p存放排列
void generatep(int index){
if(index==n+1){ ///递归结束条件
for(int i=1;i<=n;i++)
cout<<p[i]<<' ';
cout<<endl;
return;
}
for(int j=1;j<=n;j++){ ///枚举1~n,将j填入p数组
if(hashTable[j]==false) {
p[index]=j;
hashTable[j]=true;
generatep(index+1);
hashTable[j]=false;
}
}
}
int main() {
cin>>n;
generatep(1);
return 0;
}
///法二:STL--next_permutation
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[5]={1,2,3,4,5};
do{
for(int i=0;i<5;i++) cout<<a[i]<<' ';
cout<<endl;
}while(next_permutation(a,a+5));
return 0;
}
///补充:STL--prev_permutation(上一个),与next_permutation(下一个)产生的排列顺序相反
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[3]={3,2,1}; ///数组元素顺序反一下即可
do{
for(int i=0;i<3;i++) cout<<a[i]<<' ';
cout<<endl;
}while(prev_permutation(a,a+3));
return 0;
}