递归实现全排列(一)

【思路】

以下用详细样例来阐述这样的实现的思路,比如实现123的全排列组合。
要求123的全排列,能够分为以下情况:
情况1:第0位为1+23的全排列
情况2:第0位为2+13的全排列
情况3:第0位为3+32的全排列
上面的情况用代码实现例如以下:

//情况1
//为了跟以下一致,加上swap(list[0],list[0]);
perm(list,1,2);
//为了跟以下一致,加上swap(list[0],list[0]);

//情况2
swap(list[0],list[1]);
perm(list,1,2);
swap(list[0],list[1]);

//情况3
swap(list[0],list[2]);
perm(list,1,2);
swap(list[0],list[2]);

这3种情况能够用循坏取代:

for(int i=0;i<=2;i++)
{
  swap(list[0],list[i]);
  perm(list,1,2);
  swap(list[0],list[i]);
}

【全排列实现代码一】

#include<iostream>
using namespace std;
void perm(char list[],int k,int m);
void perm(char list[],int k,int m)
{
    if(k==m)
    {
       for(int j=0;j<=m;j++)
       {
        cout<<list[j];
       }
       cout<<endl;
    }
    else
    {
     for(int i=k;i<=m;i++)
     {
      std::swap(list[k],list[i]);
      perm(list,k+1,m);
      std::swap(list[k],list[i]);
     }
    }
}
int main()
{
    char a[]="123";
    perm(a,0,2);
    system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/mfmdaoyou/p/6744184.html