HDU 1027 - Ignatius and the Princess II

第 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\n",ans[n]);
36     }
37 }

 

posted @ 2016-04-29 14:17  nicetomeetu  阅读(136)  评论(0编辑  收藏  举报