zoukankan      html  css  js  c++  java
  • 进出栈序列问题

    背景

    这里有n列火车将要进站再出站……
    但是,每列火车只有1节---那就是车头……

    描述

    有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出。
    (某生:不就是个栈吗?每次可以让右侧头火车进栈,或者让栈顶火车出站?
    老师:闭嘴!)
    就像这样:

      出站<——-    <——进站
                |车|
                |站|
                |__|
    

    现在请你按《字典序》输出前20种可能的出栈方案。

    输入格式

    一个整数 n<=20

    输出格式

    按照《字典序》输出前20种答案,每行一种,不要空格

    样例输入

    3

    样例输出

    123

    132

    213

    231

    321

    • 每次访问只有出栈或者进栈两种选择
    • 每次操作之后进行下一次搜索,但是搜索完成之后要及时消除影响
    int k=0;
    int n;
    int len=1,a[21];
    void dfs(stack<int> s,int num)
    {
    	if(k==20)
    		return;
    	if(num==n+1)
    	{
    		for(int i=1;i<len;i++)cout<<a[i];
    		while(!s.empty())
    		{
    			cout<<s.top();
    			s.pop();
    		}
    		cout<<endl;
    		k++;
    		return;
    	}
    	if(!s.empty())
    	{
    		a[len++] = s.top(),s.pop();
    		dfs(s,num);
    		s.push(a[--len]);
    	}
    	s.push(num);
    	dfs(s,num+1);
    }
    int main() 
    {
       	cin>>n;
       	stack<int> s;
       	dfs(s,1);
        return 0;
    }
    
  • 相关阅读:
    02-单臂路由实验
    线程高级篇-读写锁ReentrantReadWriteLock
    线程高级篇-Lock锁和Condition条件
    002 flutter的路由管理--命名路由
    fluuter的路由管理--普通路由
    003 文档的操作
    002 索引的操作
    001 elasticsearch的核心概念
    002 使用nacos完成服务的注册和发现
    001 Nacos的基础内容
  • 原文地址:https://www.cnblogs.com/1625--H/p/9475866.html
Copyright © 2011-2022 走看看