普通网友 2021-11-11 20:45 采纳率: 42.9%
浏览 20
已结题

要求输出所有火车出站的方案,以字典序排序输出。

给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。
要求输出所有火车出站的方案,以字典序排序输出。

img

  • 写回答

3条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-11 20:50
    关注
    
    #include<iostream>
    #include<stack>
    #include<algorithm>
    using namespace std;
    bool isOutNum(int *push,int *pop,int len)//判断pop是不是push的出栈序列
    {
        if(push==NULL || pop==NULL ||len<=0)
            return false;
        stack<int> Stack;
        int i=0,j=0;
        for(i=0;i<len;i++)//依次把push中的数入栈
        {
            Stack.push(push[i]);
            while(j<len && Stack.size()!=0 && pop[j]==Stack.top())//依次判断pop序列每个值是否与栈顶相等
            {
                Stack.pop();
                j++;
            }
        }
        return Stack.empty();
    }
    int main()
    {
        int N;
        while(cin>>N)
        {
            int *pushNum=new int [N];
            int *popNum=new int [N];
            for(int i=0;i<N;i++)
            {
                cin>>pushNum[i];
                popNum[i]=pushNum[i];
            }
            sort(popNum,popNum+N);
            do
            {
                if(isOutNum(pushNum,popNum,N))//如果该排列正确,则输出
                {
                    for(int i=0;i<N-1;i++)
                        cout<<popNum[i]<<" ";
                    cout<<popNum[N-1]<<endl;
                }
            }
            while(next_permutation(popNum,popNum+N));//获取下一个排列        
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月19日
  • 已采纳回答 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?