#include <iostream>
#include <vector>
using namespace std;
vector<string> permu(string a, int n)
{
vector<string> resv;
string ins;
ins += a[n];
if(n == 0)
{
resv.push_back(ins);
return resv;
}
vector<string> lastres = permu(a, n-1);
for(vector<string>::iterator iter = lastres.begin(); iter != lastres.end(); ++iter)
{
string last = *iter;
for(int i = 0; i <= last.size(); ++i)
{
string t(last);
t.insert(i, ins);
resv.push_back(t);
}
}
return resv;
}
int main(void)
{
string a("abcd");
vector<string> res = permu(a, a.size() - 1);
cout << "total permu : " << res.size() << endl << "which is showing below:" << endl << endl;
for(vector<string>::iterator iter = res.begin(); iter != res.end(); ++iter)
{
string t = *iter;
cout << t << endl;
}
return 0;
}
/* 理解错题意版 */
#include <iostream>
#include <vector>
using namespace std;
vector<string> v;
void permu(string &a, int n)
{
if(n < 0)
{
string t = "";
v.push_back(t);
return;
}
permu(a, n - 1);
int size = v.size();
for(int i = 0; i < size; ++i)
{
if(v.empty())
{
string t = "";
t += a[i];
v.push_back(t);
continue;
}
string vi = v[i];
vi += a[n];
v.push_back(vi);
}
}
void print()
{
for(int i = 0; i < v.size(); ++i)
{
cout << v[i] << endl;
}
}
int main(void)
{
string a("abcde");
permu(a, a.size() - 1);
print();
return 0;
}