关于全排列有许多方法,查了一下没有找到我的算法,这里分享给大家。
算法题:用你熟悉的编程语言,设计如下功能的函数:输入一个字符串,输出该字符串中所有字母的全排列。程序请适当添加注释。
C++函数原型: void Print(const char *str)
输入样例: abc
输出结果: abc、acb、bca、bac、cab、cba
算法思想:将每个位置的字符往前移,移动一次是一种排列方法,第一个a移动一次成为
bac,移动两次变成bca,到达字符串顶端,开始移动现在处于低端的b,也是两次,在移
动c,还是两次,即六种方法。
代码:
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string Str1,Str2;
int i,j;
while (cin>>Str1)
{
Str2 = Str1;
for (j = 0;j<Str2.size();j++)
for (i = 0; i < Str2.size()-1; i++)
{
cout << Str2 << endl;
swap(Str2[i],Str2[i + 1]);
if (Str2 == Str1)
break;
else
continue;
}
}
return 0;
}