码迷,mamicode.com
首页 > 其他好文 > 详细

递归实现全排列(一)

时间:2015-06-07 23:42:18      阅读:448      评论:0      收藏:0      [点我收藏+]

标签:全排列   递归   

【思路】

下面用具体例子来阐述这种实现的思路,例如实现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;
}

递归实现全排列(一)

标签:全排列   递归   

原文地址:http://blog.csdn.net/adminabcd/article/details/46404453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!