全排列算法
输入字符,对字符进行全排列。这里用了两种方法,递归调用(一些书上写的是DFS)和c++系统自带的方式。
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
char output[10];
bool s[10];
void permutation(string str, int index)
{
if (index == str.size())
{
for (int i = 0; i < str.size(); i++) {
cout << output[i];
}
cout << endl;
return;
}
for (int i = 0; i < str.size(); i++) //每个位置有3个选择
{
if (s[i] ) { continue; }//这个位置不能选这个字母,直接跳过
output[index] = str[i];
s[i] = true;
permutation(str, index+1);
s[i] = false; //回溯,重要一步
}
}
int main()
{
string s;
cin >> s;
//自定义全排列
permutation(s, 0);
//系统的全排列行数,没有下一个时返回false
while (next_permutation(s.begin(), s.end() )) {
cout << s << endl;
}
}