求n个数全排列的第m个,,
深搜的顺序就是排列的顺序
8!=40320
给的m<=10000,所以只要排列八个数就可以了
#include<stdio.h> #include<string.h> int m,n,count,num[9],k,link[9]; void dfs(int u) { int i; if(count==m)return; if(u==9) { count++; if(count==m) { if(n<=8) { printf("%d",num[k+1]-k); for(i=k+2;i<=8;i++) printf(" %d",num[i]-k); printf("\n"); } else { printf("1"); for(i=2;i<=k;i++) printf(" %d",i); for(i=1;i<=8;i++) printf(" %d",num[i]+k); printf("\n"); } } } for(i=1;i<=8;i++) { if(link[i]==0) { link[i]=1; num[u]=i; dfs(u+1); link[i]=0; } } } int main() { int i,j; while(scanf("%d%d",&n,&m)!=-1) { memset(num,0,sizeof(num)); memset(link,0,sizeof(link)); count=0; if(n<8) k=8-n; else k=n-8; dfs(1); } return 0; }