| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2035 人关注过本帖
标题:车站调度
只看楼主 加入收藏
倾听心跳
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:153
注 册:2016-6-22
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:4 
车站调度
有顺序排列的1,2, 3,…,n节车厢在入站口等待调度。车站设置了一个栈作为缓冲,这样的话只可能进行下列两个操作之一:
      (1)如果还有车厢在入站口,将最前面的入栈缓冲
      (2)将栈顶的车厢驶出车站   
给定一个1至n的排列,问其作为出站序列是否合法。
注意:入站顺序为1,2, 3,…,n,即1先入栈...,n最后入栈。
输入
输入包含若干测试用例。每一个测试用例由多行组成。第一行是两个整数n(1<=n <= 100)和m,n表示入站序列为1至n。m表示随后有m行出站序列。
当n,m均为0时表示输入结束。
输出
对应每一个出站序列,合法则输出一行YES,否则输出一行NO。

请问这程序怎么写
2016-06-24 10:21
倾听心跳
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:153
注 册:2016-6-22
收藏
得分:0 
顶一下
2016-06-24 22:11
倾听心跳
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:153
注 册:2016-6-22
收藏
得分:0 
程序代码:
#include<stdlib.h>  
#include<stdio.h>  
#include<string.h>  
#include<iostream>  
using namespace std;  
#define OK 1  
#define OVERFLOW -2  
#define ERROR 0   
#define TRUE 1  
#define FALSE 0  
#define   STACK_INIT_SIZE   100  
#define   STACKINCREMENT       10  
typedef int Status;  
typedef   int     SElemType;   
typedef struct {  
        SElemType    *base;            
        SElemType    *top;              
        int        stacksize;        
}SqStack;  
Status InitStack(SqStack &S) {  
  
        S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));  
        if(!S.base) return OVERFLOW;  
        S.top=S.base;  
        S.stacksize=STACK_INIT_SIZE;  
        return OK;  
}  

Status StackEmpty(SqStack S) {  
  
        if(S.top==S.base) return TRUE;  
        else                 return FALSE;  
}  
Status GetTop(SqStack S,SElemType &e) {  
  
        if(!S.base) return ERROR;  
        e=*(S.top-1);  
        return e;  
}  
Status Push(SqStack &S,SElemType e) {  
  
        if(!S.base) return ERROR;  
        if(S.top-S.base>=S.stacksize) {  
                S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));  
                if(!S.base) return OVERFLOW;  
                S.top=S.base+S.stacksize;  
                S.stacksize+=STACKINCREMENT;  
        }  
        *S.top++=e;  
        return OK;  
}  
Status Pop(SqStack &S,SElemType &e) {  
  
        if(S.top==S.base) return ERROR;  
        e=*(--S.top);  
        return OK;  
}  

int check_valid (char in[], char out[], int length)  
{  
        int i=0, j=0;    
        SElemType e;  
        SqStack s;    
        InitStack(s);  
        if (in==NULL || out==NULL || length <=0)        
                return -1;    
  
        for (i=0; i<length; i++)  
        {  
                Push(s,in[i]);          
                while (!StackEmpty(s) && GetTop(s,e)==out[j]) {  
                        Pop(s,e);    
                        j++;  
                }  
        }  
        if (StackEmpty(s))  
                return 1;  
        return 0;  
}  
int main (int argc, char *argv[])  
{  
        int n,m;  
        int i;  
        char in[101],out[101];    
        scanf("%d %d", &n, &m);   
        scanf("%s",&in);    
        while(n!=0 && m!=0)  
        {  
                for(i=1;i<=m;i++)  
                {  
                        scanf("%s",out);  
                        if( check_valid(in,out,n)>0)  
                                printf("YES\n");  
                        else  
                                printf("NO\n");  
                }  
        }  
        return 0;  
  
          
}  


acm输出超限,大神修改一下
2016-06-24 22:12
merlinzjl
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2016-6-24
收藏
得分:10 
输入讲讲清楚
2016-06-24 22:15
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:10 
怎么写?
用手写啊
2016-06-24 22:22
快速回复:车站调度
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023060 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved