递归实现全排列

排列问题设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
#include
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);
}

你可能感兴趣的:(算法,#,递归与分治策略,算法)