就是一个全排列的变种,其实还有优化的方法,但是太烦了,直接暴力搜了
#include <stdio.h>
#define MAX 1030
int check[MAX],order[MAX],n,k;
int dfs(int begin,int now)
{
int i=0;
if(n == now)
{
if(0 == --k)
{
for(i=0;i<n;++i)
{
printf("%d ",order[i]);
}
putchar('\n');
return 1;
}
else
{
return 0;
}
}
for(i=begin+1;i<=n;++i)
{
if(!check[i])
{
check[i]=1;
order[now]=i;
if(dfs(0,now+1))
{
return 1;
}
check[i]=0;
}
}
return 0;
}
int main()
{
int i=0,T=0,j=0,z=0;
char flag=0;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&k);
flag=0;
for(i=0;i<n;++i)
{
scanf("%d",order+i);
}
for(j=1;j<=n;++j)
{
check[j]=1;
}
check[order[n-1]]=0;
for(i=n-2;i>=0;--i)
{
check[order[i]]=0;
if(dfs(order[i],i))
{
flag=1;
break;
}
}
if(!flag)
{
while(!dfs(0,0));
}
}
}