思路是找到与给定的num数组相同的的排列后,再搜索m+1次就是答案排列
import java.util.*;
public class Main{
static int n;
static int m;
static int[] arr;
static int[] flag;
static int[] num;
static int count = 0;
static int v = 0;
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
num =new int[n];
for(int i = 0;i < n;++i ){
num[i] = sc.nextInt();
}
arr = new int[n];
flag = new int[n+1];
dfs(0);
}
public static void dfs(int x){
//剪枝 直接return掉不符合num的
if( v == 0 && x > 0){
for(int i = 0;i < x; ++i){
if(arr[i] != num[i]){
return;
}
}
v = 1;//找到后还是老老实实搜索
}
if(x >= n ){
count++;
if(count == m+1 ){
for(int i = 0;i < n;++i){
System.out.print(arr[i]+" ");
}
System.exit(0) ;
}
return;
}
for(int i = 0;i < n;++i){
if(flag[i] == 0){
//没被选过
flag[i] = 1;
arr[x] = i+1;
dfs(x+1);
flag[i] = 0;
arr[x] = 0;
}
}
}
}