/******************************************************************************
Copyright (C), 2001-2011, Huawei Tech. Co., Ltd.
******************************************************************************
File Name :
Version :
Author :
Created : 2013/08/10
Last Modified :
Description :
Function List :
History :
1.Date : 2013/08/10
Author :
Modification: Created file
******************************************************************************/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
using namespace std;
/*
详细描述:
int JudgeTrainSequence (int maxNum, char *pOutSeq);
输入参数:
int maxNum:进站的火车最大编号
char* pOutSeq:使用字符串表示火车出站序列
输出参数(指针指向的内存区域保证有效):
无。
返回值:
Int: 根据输入的进站序列判断,如果输入的出战序列是可能的,返回1,否则返回0;
*/
int JudgeTrainSequence (int maxNum, char *pOutSeq)
{
int result=true;
queue<int> inTrains;
stack<int> swapTrains;
for(int i=1;i<=maxNum;i++)
inTrains.push(i+'0');
int outTrainIndex=0;
while(outTrainIndex<maxNum)
{
if(!swapTrains.empty()&&swapTrains.top()==pOutSeq[outTrainIndex])
{
swapTrains.pop();
outTrainIndex++;
}
else if(!inTrains.empty())
{
if(inTrains.front()==pOutSeq[outTrainIndex])
{
inTrains.pop();
outTrainIndex++;
}
else
{
swapTrains.push(inTrains.front());
inTrains.pop();
}
}
else
{
result=false;
break;
}
}
return result;
}