递归实现全排列

排列问题设R={r1,r2,…,rn}是要进行排列的n个元素*Ri=R-{ri} 集合x中元素的全排列,记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每排列前加上前缀ri得到的排列R的全排列可归纳定义如下 当n=1时,Perm®=®,其中r是集合R中的唯一元素当n>1时,Perm®由(r1)Perm(R1),(r2)Perm(R2)……(rn)Perm(Rn)构成

#include<iostream>
#include<algorithm>
using namespace std;
/*排列问题
 *设R={r1,r2,…,rn}是要进行排列的n个元素*Ri=R-{ri}
 * 集合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)……(rn)Perm(Rn)构成
 */
//k是起始位置,m是元素个数
template<class T>
void Perm(T list[],int k,int m)
{
    if(k==m-1)
    {
        for(int i=0;i<m;i++)
        {
            cout<<list[i];
        }
        cout<<endl;
    }
    else
    {
        for(int i=k;i<m;i++)
        {
            swap(list[k],list[i]);
            Perm(list,k+1,m);
            swap(list[k],list[i]);
        }
    }
}

int main()
{
    char p[3]={'a','b','c'};
    Perm<char>(p,0,3);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值