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