字符串的全排列
我们以三个字符abc 为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc 的排列。当两个字符bc 的排列求好之后,我们把第一个字符a 和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac 的排列。现在是把c 放到第一位置的时候了。记住前面我们已经把原先的第一个字符a 和后面的b 做了交换,为了保证这次c 仍然是和原先处在第一位置的a 交换,我们在拿c 和第一个字符交换之前,先要把b 和a 交换回来。在交换b 和a 之后,再拿c 和处在第一位置的a 进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a 的排列。既然我们已经知道怎么求三个字符的排列,那么固定第一个字符之后求后面两个字符的排列,就是典型的递归思路了。
#include<iostream>
using namespace std;
void permutation(char *pstr,char *pbegin)
{
if(!pstr||!pbegin)return;
if(*pbegin=='\0')cout<<pstr<<endl;
else
{
for(char *pch=pbegin;*pch!='\0';++pch)
{
char temp=*pch;
*pch=*pbegin;
*pbegin=temp;
permutation(pstr,pbegin+1);
temp = *pch;
*pch = *pbegin;
*pbegin = temp;
}
}
}
int main()
{
char pstr[10];
while(cin>>pstr)
{
permutation(pstr,pstr);
}
return 0;
}
浙公网安备 33010602011771号