题解 | #出栈顺序#

出栈顺序

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;
}
全部评论

相关推荐

身边有人上海、深圳&nbsp;6、7k&nbsp;都去了,真就带薪上班了。
程序员小白条:木的办法, 以后越来越差,还是家附近宅着吧,毕业的人越来越多,岗位都提供不出来,经济又过了人口红利期
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
简历当中有水分算不算造假...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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