题解 | #出栈顺序#

出栈顺序

http://www.nowcoder.com/questionTerminal/37dafde80fa2445d91f6d7ae18795668

BFS裸题,在搜索中模拟栈的弹出和压入即可

注意,代码全篇使用STL,不适用C语言题解

#include <iostream>
#include <stack>
#include <deque>
#include <vector>
using namespace std;

vector<char> ans;

void dfs(stack<char>& search_stack, deque<char>& search_queue)
{
    // 1. 模拟栈和搜索队列都为空,则输出答案
    if(search_stack.empty() && search_queue.empty())
    {
        for(const auto& c : ans)
        {
            cout << c;
        }
        cout << endl;
        return;
    }
    // 2. 模拟栈弹出
    if(!search_stack.empty())
    {
        // 状态储存
        char pop_char = search_stack.top();
        ans.push_back(pop_char);
        //cout << "pop: " << pop_char << endl;
        search_stack.pop();

        dfs(search_stack, search_queue);
        // 状态回溯
        ans.pop_back();
        search_stack.push(pop_char);
    }
    // 3. 模拟栈压入
    if(!search_queue.empty())
    {
        // 状态储存
        char front_char = search_queue.front();
        search_stack.push(front_char);
        //cout << "push: " << front_char << endl;
        search_queue.pop_front();
        
        dfs(search_stack, search_queue);
        // 状态回溯
        search_queue.push_front(front_char);
        search_stack.pop();
    }
}

int main() 
{
    string words;
    deque<char> search_queue;
    stack<char> search_stack;

    cin >> words;
    for(const auto& c : words)
    {
        search_queue.push_back(c);
    }
    dfs(search_stack, search_queue);
    return 0;
}
全部评论

相关推荐

06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务