求字符串全排列
Q:输入一个字符串,打印出该字符串中字符的所有排列
A:以abc为例,我们首先将a固定在第一位,然后排列bc,当bc排列完成后,我们会将b固定在第一位,也就是交换a和b的位置,变成bac,然后排列ac,当ac排列完成后,我们需要将c固定在第一位,先将a和b的位置复原,在交换a和c的位置即可。因此,用递归来求解再自然不过。对于字符串abcdedfgh….,在以begin为开头的子串中,我们要依次将子串的每一个字符固定在首位,这需要依次swap操作,然后我们递归的处理子串开头之后的更小子串的排列,当处理好之后,我们回到该子串,再将刚才的swap操作重新操作一遍。
#include <iostream>
using namespace std;
void Arrange(char* str,char* begin)
{
if(!str || !begin)
return;
if(*begin=='\0')
cout <<str<<endl;
else
{
for(char* p=begin;(*p)!='\0';++p)
{
char temp=*p;
*p=*begin;
*begin=temp;
Arrange(str,begin+1);
temp=*p;
*p=*begin;
*begin=temp;
}
}
}
int main()
{
char str[50];
while(cin >>str)
Arrange(str,str);
return 0;
}
浙公网安备 33010602011771号