大意是给出1-10000的一个全排列,然后给出整数m,求这个全排列的后m个全排列。从这个排列开始深搜即可。
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1e4+10;
const int M = 1e6;
int a[N];
int b[N];
bool yep = false;
int cnt;
int n,m;
int st[N];
int flag = 0;
void dfs(int u)
{
if(yep == true) return;
if(u > n)
{
flag = 1;
cnt++;
if(cnt == m+1)
{
for(int i = 1 ; i<= n ; i++) printf("%d ",a[i]);
yep = true;
}
return;
}
for(int i = 1 ; i<= n ; i++)
{
if(flag == 0) i = b[u];
if(!st[i])
{
a[u] = i;
st[i] = 1;
dfs(u+1);
st[i] = 0;
}
}
}
int main()
{
cin>>n>>m;
for(int i = 1 ; i<= n ; i++) scanf("%d",&b[i]);
dfs(1);
return 0;
}