枚举排列

 

 

无重复的全排列,0~n-1

 1 void print_permutition(int n,int *a,int cur)
 2 {
 3     if(n==cur)
 4     {
 5         for(int i=0;i"%d",a[i]);
 6         printf("\n");
 7     }
 8     else
 9     {
10         for(int i=0;i)
11         {
12             int ok=1;
13             for(int j=0;j)
14             {
15                 if(a[j]==i)
16                 {
17                     ok=0;
18                     break;
19                 }
20             }
21             if(ok)
22             {
23                 a[cur]=i;
24                 print_permutition(n,a,cur+1);
25             }
26         }
27     }
28 }
View Code

 

数组p中有可以重复的元素,生成排序。

 

 1 void print_permutition(int *p,int n,int *a,int cur)//p为升序的数组,输出p的排序来。 
 2 {
 3     if(n==cur)
 4     {
 5         for(int i=0;i"%d",a[i]);
 6         printf("\n");
 7     }
 8     else
 9     {
10         for(int i=0;i)
11         {
12             if(!i||p[i]!=p[i-1])
13             {
14                 int c1=0,c2=0; 
15                 for(int j=0;j)
16                 {
17                     if(a[j]==p[i])
18                     c1++;
19                 }
20                 for(int j=0;j)
21                 {
22                     if(p[i]==p[j])    c2++;
23                 }
24                 if(c2>c1)
25                 {
26                     a[cur]=p[i];
27                     print_permutition(p,n,a,cur+1);
28                 }
29             }
30         }
31     }
32 }
View Code

 

转载于:https://www.cnblogs.com/WDKER/p/5152500.html

你可能感兴趣的:(枚举排列)