怎么说呢,都说是全排列,但是我不会(等会儿看看),康拓排序我觉得用不了,因为太大了,long long都装不下,但是m的范围又小,所以可以直接枚举,代码如下:
#include <stdio.h>
#include <stdlib.h>
int num[10000];
int used[10001];
int m, n;
int t;
void output(void)
{
int i;
for(i = 0; i < n; i++){
if(i != 0){
printf(" ");
}
printf("%d", num[i]);
}
printf("\n");
exit(0);
}
void srch(int now, int start)
{
int i;
if(now == n){
if(t == m){
output();
}
t++;
return;
}
for(i = start; i <= n; i++){
if(!used[i]){
used[i] = 1;
num[now] = i;
srch(now + 1, num[now + 1]);
used[i] = 0;
}
}
if(now != 0){
num[now] = num[now - 1] + 1;
}
num[now] = 1;
}
int main(int argc, char **argv)
{
int i;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++){
scanf("%d", &num[i]);
}
srch(0, num[0]);
return 0;
}