C语言实现全排列

实现全排列,递归实现

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int n=0;
 4 
 5 void swap(int *a, int *b)
 6 {
 7      int m;
 8      m=*a;
 9      *a=*b;
10      *b=m;
11 }
12 void perm(int list[], int k, int m)
13 {
14      int i;
15      if(k==m)
16      {
17              for(i=0;i<=m;i++)
18                               printf("%d ",list[i]);
19              printf("\n");
20              n++;
21      }
22      else
23      {
24          for(i=k;i<=m;i++)
25          {
26                           swap(&list[k],&list[i]);
27                           perm(list, k+1, m);
28                           swap(&list[k], &list[i]);
29          }
30      }
31 }       
32 int main(void)
33 {
34     int list[]={1,2,3,4,5,6,7};
35     perm(list,0,6);
36     printf("total:%d\n",n);
37     system("pause");
38     return 0;
39 }                  

求字典顺序的下一个全排列

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void swap(int *a, int *b)
 4 {
 5      int m;
 6      m=*a;
 7      *a=*b;
 8      *b=m;
 9 }
10 void perm(int list[], int len)
11 {
12      int i=0;
13      int k=0;
14      int n=len;
15      int j=1;
16      for(;j<=len;j++)
17      {
18                      if(list[j-1]<list[j])
19                                           i=j;
20      }
21      for(j=1;j<=len;j++)
22      {
23                         if(list[i-1]<list[j])
24                                              k=j;
25      }
26      swap(&list[i-1],&list[k]);
27      for(j=0;j<=i;j++)
28      {
29                       printf("%d ",list[j]);
30      }
31      for(j=len;j>i;j--)
32      {
33                        printf("%d ",list[j]);
34      }
35 }
36 int main(void)
37 {
38     int list[]={7,6,4,1,3,5,2};
39     perm(list,6);
40     system("pause");
41     return 0;
42 }                  

 

C语言实现全排列,布布扣,bubuko.com

C语言实现全排列

上一篇:vue中Axios的封装和API接口的管理


下一篇:Android中的混淆