递归实现全排列

Posted mfmdaoyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现全排列相关的知识,希望对你有一定的参考价值。

【思路】

以下用详细样例来阐述这样的实现的思路,比如实现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;
}

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

递归实现全排列

算法——全排列

全排列 递归实现

算法之使用递归求解全排列

递归实现DFS全排列

PHP实现全排列(递归算法)