法1:裸的全排列
加点优化也可以很快---洛谷6ms
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int read(){
char c=getchar();
int x=;
while(c<''||c>'') c=getchar();
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x;
}
int n,m;
int c[N];
int main(){
n=read();m=read();
for(int i=;i<=n;i++) c[i]=read();
for(int i=;i<=m;i++)
next_permutation(c+,c+n+);
for(int i=;i<=n;i++) printf("%d ",c[i]);
}
法2:编码解码
如白书第十章
以后再更新