回溯法输出字符串入栈出栈的全部可能序列

来源:互联网 发布:图像分类算法matlab 编辑:程序博客网 时间:2024/06/14 09:13

输入:

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;}



原创粉丝点击