递归实现全排列
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;
}
以上是关于递归实现全排列的主要内容,如果未能解决你的问题,请参考以下文章