第 m 大的 n 个数全排列
DFS可过
1 #include <iostream> 2 using namespace std; 3 int n,m; 4 int ans[1005]; 5 bool flag; 6 int vis[1005]; 7 void dfs(int x) 8 { 9 if(x>n){ 10 m--; 11 if(!m) flag=1; 12 return ; 13 } 14 if(!flag){ 15 for(int i=1;i<=n;i++) 16 { 17 if(!vis[i]&& !flag) 18 { 19 vis[i]=1; 20 ans[x]=i; 21 dfs(x+1); 22 vis[i]=0; 23 } 24 } 25 } 26 } 27 int main() 28 { 29 while(~scanf("%d%d",&n,&m)) 30 { 31 flag=0; 32 for(int i=1;i<=n;i++) vis[i]=0; 33 dfs(1); 34 for(int i=1;i<n;i++) printf("%d ",ans[i]); 35 printf("%d ",ans[n]); 36 } 37 }