首页 > 代码库 > C语言实现全排列
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 else23 {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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。