深度遍历,模拟出栈入栈

火车进站

http://www.nowcoder.com/questionTerminal/97ba57c35e9f4749826dc3befaeae109

深度遍历,模拟出栈入栈
递归时分三种情况:
1.进站不出
2.进站之后马上出站
3.栈里的车出来
当全部火车出站,算一种结果,最后用set去重排序。。。
运行时间45ms,好像要优于全排列的方法

#include <bits/stdc++.h>

using namespace std;
void dfs(set<vector<int>> &st, vector<int> &nums, stack<int> &s, vector<int>& q, int k)
{
    //车全部出站,返回
    if(q.size()==nums.size())
    {
        st.insert(q);
        return;
    }
    for(int i=0; i<3; i++)
    {
        //有三种情况 
        //进站,马上出站
        if(k<nums.size() && i==0)
        {
            q.push_back(nums[k++]);
            dfs(st, nums, s, q, k);
            q.pop_back();
            k--;
        }
        //进站之后不出站
        else if(k<nums.size() && i==1)
        {
            s.push(nums[k++]);//从待入站的车中取出一辆入站
            dfs(st, nums, s, q, k);
            s.pop();
            k--;
        }
        //车从站里出来
        else if(i==2 && !s.empty())
        {
            q.push_back(s.top());
            s.pop();
            dfs(st, nums, s, q, k);
            s.push(q[q.size()-1]);
            q.pop_back();
        }
    }
}
int main()
{
    //freopen("in.txt","r",stdin);
    int n;
    while(cin>>n)
    {
        vector<int> nums(n);//待入栈的车
        for(int i=0; i<n; i++)
            cin>>nums[i];
        stack<int> s;//站内的车
        vector<int> q;//已经出站的车
        set<vector<int>> st;
        dfs(st, nums, s, q, 0);
        for(auto iter=st.begin(); iter!=st.end(); ++iter)
        {
            for(int i=0; i<n; i++)
            {
                cout<<(*iter)[i]<<" ";
            }
            cout<<endl;
        }
    }
}
全部评论
进站后马上出站是否可以等价为进站+出站,这样就可以少一种循环了
点赞 回复 分享
发布于 2020-09-02 23:24

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
Aurora23:属于挂一半,暂时进池子了,隔一段时间没有其他组捞的话就彻底结束了
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

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