zoukankan      html  css  js  c++  java
  • 火车进站

    描述

    给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。

    知识点
    运行时间限制 0M
    内存限制 0
    输入

    有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。

    输出

    输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。

    样例输入 3 1 2 3
    样例输出

    1 2 3 1 3 2 2 1 3 2 3 1 3 2 1

    隐含条件,这个题目中的火车站是个栈,前面的没出站,后面的来了的话,就把前面的堵在里面了。

    仔细思考几个回合,即可发现其中规律。

    本题用dfs解决,代码如下:

    #include<iostream>
    #include<stack>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    void display(vector<int> arr)
    {
        for(unsigned int i=0; i<arr.size()-1; i++)
        {
            cout<<arr[i]<<' ';
        }
        cout<<arr[arr.size()-1]<<endl;
    }
    
    bool comp12(vector<int> v1, vector<int> v2)
    {
        int n= v1.size();
        for(int i=0; i<n; i++)
        {
            if(v1[i]!=v2[i])
            {
                return v1[i]<v2[i];
            }
        }
        return true;
    }
    
    void solve(int count, int *input, int N, stack<int> &stk, vector<int> &arr, vector<vector<int> > &arrs)
    {
        if(count==N-1)
        {
            //the last
            arr.push_back(input[count]);
    
            int stksz = stk.size();
            while(!stk.empty())
            {
                int tmp = stk.top();
                stk.pop();
                arr.push_back(tmp);
            }
    
    
            arrs.push_back(arr);
    
    
    
            for(int i=0; i<stksz; i++)
            {
                int tmp = arr.back();
                stk.push(tmp);
                arr.pop_back();
            }
            arr.pop_back();//pop the last
        }
        else
        {
            stk.push(input[count]);
            int stksize = stk.size();
            //cout<<"size"<<stksize<<endl;
            for(int i=0; i<=stksize; i++)
            {
                //cout<<"x"<<i<<endl;
                for(int j=0; j<i; j++)
                {
                    int tmp = stk.top();
                    //cout<<"top"<<tmp<<endl;
                    stk.pop();
                    arr.push_back(tmp);
                }
                solve(count+1,  input ,N,stk, arr, arrs);
                for(int j=0; j<i; j++)
                {
                    int tmp = arr.back();
                    stk.push(tmp);
                    arr.pop_back();
                }
            }
            stk.pop();
        }
    }
    
    int main()
    {
        int N;
        cin>>N;
        int *input;
        input = new int [N];
    
        for(int i=0; i<N; i++)
        {
            cin>>input[i];
        }
    
        int count = 0;
        stack<int> stk;
        vector<int> arr;
        vector<vector<int> > arrs;
        solve(count, input, N, stk, arr, arrs);
    
        sort(arrs.begin(), arrs.end(), comp12);
    
        for(unsigned int i=0; i<arrs.size(); i++)
        {
            display(arrs[i]);
        }
    
        delete [] input;
    
        return 0;
    }
    

      

  • 相关阅读:
    Spring MVC学习03页面跳转
    Spring Boot学习07配置加载顺序
    Spring MVC学习01从空白Maven项目搭建环境
    Spring MVC学习05JSON序列化
    剑指Offer 44 数字序列中某一位的数字
    Spring MVC学习06异常解析器
    MSSQL·查看DB中所有表及列的相关信息
    MSSQL·查询数据库中所有索引的相关信息
    MSSQL·最长输出长度限制之解决方案
    .Net Core·热加载的实现及测试
  • 原文地址:https://www.cnblogs.com/hardsoftware/p/6292617.html
Copyright © 2011-2022 走看看