输入:
abc
输出:
abc
acb
bac
bca
cba
#include <stack>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <deque>
using namespace std;
vector<deque<char> > res;
void printOut(deque<char> q) {
while(q.size() > 0) {
cout << q.front();
q.pop_front();
}
cout << endl;
return;
}
/*
qValues 存放入栈序列
sTemp 用于模拟入栈过程
*/
void findAllSequences(deque<char> qValues,stack<char> sTemp,deque<char> qOutput, int size){
if((qValues.size() == 0)&&(sTemp.size() == 0)&&(qOutput.size() == size)) {
res.push_back(qOutput);
return;
}
if(qValues.size()!=0){
char c = qValues.front();
sTemp.push(c);
qValues.pop_front();
findAllSequences(qValues,sTemp,qOutput, size);
sTemp.pop();
qValues.push_front(c);
}
if(sTemp.size()!=0)
{
char c = sTemp.top();
sTemp.pop();
qOutput.push_back(c);
findAllSequences(qValues,sTemp,qOutput, size);
qOutput.pop_back();
sTemp.push(c);
}
return;
}
int main()
{
std::string str;
cin >> str;
deque<char> qValues;
deque<char> qOutput;
stack<char> sTemp;
for(int i = 0; i < str.size(); i++) {
qValues.push_back(str[i]);
}
findAllSequences(qValues, sTemp, qOutput, str.size());
for(int j = res.size() - 1; j >= 0 ; j--) {
printOut(res[j]);
}
return 0;
}