集合的全排列问题(递归实现)
Posted geziyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合的全排列问题(递归实现)相关的知识,希望对你有一定的参考价值。
设R={r1,r2,r3,.....rn}要进行全排列的n个元素,集合X中元素的全排列记为perm(X),则(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列定义可归纳定义如下:
当n=1时,perm(R) = (r),其中r为集合R中唯一元素
当n>1时,perm(R)由(r1)perm(R1)、(r2)perm(R2).........构成
因此可以设计全排列的递归算法;
//产生元素k—m的全排列,作为k-1个元素的后缀 void Perm(int list[], int k, int m){ //构成一次全排列,输出结果 if( k == m ){ for( int i = 0; i < m; i++ ) cout<<list[i]<<" "; cout<<endl; } else{ //在数组list中,产生元素k—m的全排列 for( int j = k; j <= m; j++){ swap(list[k],list[j]); Perm(list,k+1,m); swap(list[k],list[j]); } } }
以上是关于集合的全排列问题(递归实现)的主要内容,如果未能解决你的问题,请参考以下文章