全排列
排列
2023-09-14 08:58:23 时间
全排列
•从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n各不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
•设一组数R={r1,r2,r3,...,rn},全排列为perm(R)。
n=1时,Perm(R)=r,其中r是集合中唯一元素
n>1时,Perm(R)由r1Perm(R1), r2Perm(R2), r3Perm(R3),…, rnPerm(Rn)构成。
为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
1 # include<stdio.h> 2 void Swap(int& x,int& y) 3 { 4 int temp=x; 5 x=y; 6 y=temp; 7 } 8 void Perm(int list[],int k,int m) //k表示前缀的位置,m是要排列的数目. 9 { 10 if(k==m-1) //前缀是最后一个位置,此时打印排列数. 11 { 12 for(int i = 0; i < m; i++) 13 { 14 printf("%d ",list[i]); 15 } 16 printf("\n"); 17 } 18 else 19 { 20 for(int i = k; i < m; i++) //交换前缀,使之产生下一个前缀. 21 { 22 Swap(list[k],list[i]); 23 Perm(list,k+1,m); 24 //将前缀换回来,继续做上一个的前缀排列. 25 Swap(list[k],list[i]); 26 } 27 } 28 } 29 30 int main() 31 { 32 int list[20]; 33 int i,m,n,j; 34 while(scanf("%d%d",&n,&m)!=EOF) 35 { 36 for(i=0; i<n; i++) 37 scanf("%d",&list[i]); 38 Perm(list,0,m); 39 for(i=0; i<m; i++) 40 for(j=m; j<n; j++) 41 { 42 Swap(list[i],list[j]); 43 Perm(list,0,m); 44 Swap(list[i],list[j]); 45 } 46 } 47 return 0; 48 }
相关文章
- php获取文本内容并随机排列
- 【说站】css flex的排列方式
- C++枚举数组的排列状态
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-627 排列
- 2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组
- 数组乱序排列详解编程语言
- Dominator:一天内能完成10万多块马里奥多米诺骨牌排列的机器人
- Oracle自动排序:让数据更有效排列(oracle自动排序)
- SQL Server排序数据分析及处理技巧(sqlserver排列)
- MySQL如何对一个字段进行降序排列(mysql一个字段降序)
- php遍历数据表数据并列表横向排列的代码
- C#算法之全排列递归算法实例讲解
- C语言实现输入一个字符串后打印出该字符串中字符的所有排列