首页 > 其他 > 详细

递归实现全排列(一)

时间:2015-06-07 23:40:50      阅读:431      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!