集合的全排列问题(递归实现)

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]);
        } 
    } 
} 

 

以上是关于集合的全排列问题(递归实现)的主要内容,如果未能解决你的问题,请参考以下文章

全排列算法(递归)

全排列问题的递归算法(Perm)

递归之排列问题

字符串的全排列

C++代码 递归算法 n个数的全排列 (是任意的,可不连续) 要求: 提示输入数的个数n 然后提示输入这n个

算法——全排列