您的位置:首页 > 其它

递归实现全排列(一)

2015-06-07 21:39 295 查看

【思路】

下面用具体例子来阐述这种实现的思路,例如实现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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: