NYOJ 19

View Code
 1 /*
2 问题:按字典序全排列
3 法一:分别以数字i开头 利用递归深搜
4 */
5 #include<iostream>
6 using namespace std;
7 bool flag[10];
8 int n,m;
9 void digui(int h,int b[],int x)
10 {
11 int i;
12 if(x==m)
13 {
14 for(i=0;i<m;++i)
15 cout<<b[i];
16 cout<<endl;
17 return ;
18 }
19 for(i=1;i<=n;++i)
20 if(!flag[i])
21 {
22 b[x]=i;
23 flag[i]=1;
24 digui(i,b,x+1);
25 flag[i]=0;
26 }
27 }
28 int main()
29 {
30 int i,t;
31 int a[10];
32 cin>>t;
33 while(t--)
34 {
35 for(i=0;i<10;++i)
36 flag[i]=0;
37 cin>>n>>m;
38 for(i=1;i<=n;++i)
39 {
40 flag[i]=1;
41 a[0]=i;
42 digui(i,a,1);
43 flag[i]=0;
44 }
45 }
46 system("pause");
47 return 0;
48 }
49 //法二:利用STL
50
51 #include<iostream>
52 #include<algorithm>
53 using namespace std;
54 int main()
55 {
56 int a[]={1,2,3,4,5,6,7,8,9};
57 int l[10]={0};
58 int m,n,i,t;
59 cin>>t;
60 while(t--)
61 {
62 cin>>m>>n;
63 do
64 {
65 if(!equal(a,a+n,l))
66 {
67 copy(a,a+n,l);
68 for(i=0;i<n;++i)
69 cout<<l[i];
70 cout<<endl;
71 }
72 }while(next_permutation(a,a+m));
73 }
74 system("pause");
75 return 0;
76 }
77
78

 

posted @ 2012-02-09 20:16  知行执行  阅读(219)  评论(0编辑  收藏  举报