首页 > 其他 > 详细

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

时间:2018-11-11 10:05:53      阅读:290      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:https://www.cnblogs.com/geziyu/p/9941161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!