火车进站类(栈的应用)

简单版本:129. 火车进栈 - AcWing题库

 AC代码

#include <iostream>
#include <stack>
#include <vector>

using namespace std;

vector <int> state3;    //火车出站
stack <int> state2; //火车入站
int state1 = 1; //等待入站的火车编号
int n, cut = 1;

void dfs()  //递归目的:深度搜索所有可能解
{
    //递归结束条件:答案>20种,或者已经出站的火车数等于n
    if(cut > 20)   return ;
    if(state3.size() == n)
    {
        cut ++ ;
        for(auto x :state3) cout << x;
        cout << endl;
        return ;
    }
    
    //递归转化式
    if(!state2.empty()) //站内有火车,可以出栈
    {
        //选择火车出站
        state3.push_back(state2.top());
        state2.pop();
        dfs();
        //撤销出站操作以实现火车连续入站
        state2.push(state3.back());
        state3.pop_back();
    }
    
    if(state1 <= n)
    {
        //或者火车入站
        state2.push(state1);
        state1 ++ ;
        dfs();
        //撤销入站操作以实现火车连续出站
        state1 -- ;
        state2.pop();
    }
}

int main()
{
    cin >> n;
    dfs();
    
    return 0;
}

模拟

 

posted @   光風霽月  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示