枚举生成和子集生成

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int n,i , j, a[100], a1[100];
 6     while(scanf("%d", &n) == 1)
 7     {
 8         for(i = 0; i<n; i++)
 9         {
10             scanf("%d", &a1[i]);
11         }
12 
13         for (i = n-1; i>0; i--)
14         {
15             for (j = 0; j<i; j++)
16             {
17                 if (a1[j] > a1[j+1])
18                 {
19                     int t;
20                     t = a1[j];
21                     a1[j] = a1[j+1];
22                     a1[j+1] = t;
23                 }
24             }
25         }
26         print_permutation(a, a1, n, 0);
27     }
28 }
29 
30 void print_permutation(int *a, int *a1, int n, int cur)
31 {
32     int i;
33     if (cur == n)
34     {
35         for (i = 0; i<n; i++)
36         {
37             printf("%d ", a[i]);
38         }
39 
40         printf("
");
41     }
42     else
43     {
44         for (i = 0; i<n; i++)
45         {
46             int j, ok = 1;
47             for (j = 0; j<cur; j++)
48             {
49                 if (a[j] == a1[i])
50                 {
51                     ok = 0;
52                     break;
53                 }
54             }
55 
56             if (ok)
57             {
58                 a[cur] = a1[i];
59                 print_permutation(a, a1, n, cur+1);
60             }
61         }
62     }
63 }

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int n,i , j, a[100], a1[100];
 6     while(scanf("%d", &n) == 1)
 7     {
 8         for(i = 0; i<n; i++)
 9         {
10             scanf("%d", &a1[i]);
11         }
12 
13         for (i = n-1; i>0; i--)
14         {
15             for (j = 0; j<i; j++)
16             {
17                 if (a1[j] > a1[j+1])
18                 {
19                     int t;
20                     t = a1[j];
21                     a1[j] = a1[j+1];
22                     a1[j+1] = t;
23                 }
24             }
25         }
26         print_permutation(a, a1, n, 0);
27     }
28 }
29 
30 void print_permutation(int *a, int *a1, int n, int cur)
31 {
32     int i;
33     if (cur == n)
34     {
35         for (i = 0; i<n; i++)
36         {
37             printf("%d ", a[i]);
38         }
39 
40         printf("
");
41     }
42     else
43     {
44         for (i = 0; i<n; i++)
45             if( !i || a1[i]!=a1[i-1])
46         {
47             int j, c1 = 0, c2  =0, ok = 1;
48             for (j = 0; j<cur; j++) if (a[j] == a1[i]) c1++;
49             for (j = 0; j<n; j++) if (a1[j] == a1[i]) c2++;
50             if (c1<c2)
51             {
52                 a[cur] = a1[i];
53                 print_permutation(a, a1, n, cur+1);
54             }
55         }
56     }
57 }
原文地址:https://www.cnblogs.com/shaughn/p/3950578.html