铁轨Rails UVA514(stack运用)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19641

题目大意:某地有一个火车站,如图,有n节车厢从A驶向B,n节车厢编号1~n,你的任务是能否让他们按照你输入的顺序进入到B方向的铁轨(有点像詹天佑的之字形铁轨)

完全符合栈的后进先出(LAST IN FIRST OUT) 例如出栈顺序54123不可以,但是54321 可以(先从A依次驶入Station,然后5就变成了”车头“,以54321驶出入B);

【代码如下】

#include <iostream>
#include <stack>
#define maxn 1010
using namespace std;
int num[maxn];
int main()
{
	int n;
	while(cin>>n&&n)
	{
		int sign=0;
		while(1)
		{
			stack<int>s;
			for(int i=1;i<=n;i++)
			{
				cin>>num[i];
				if(num[1]==0)
				{
					sign=1;
					break;
				}
			}
			if(sign)
				break;
			int ok=1;
			int A=1,B=1;//参照了lrj书上的写法 (A代表每节车厢,B则代表给定出栈顺序的下标)
			while(B<=n)
			{
				if(A==num[B]){A++;B++;}
				else if(!s.empty()&&s.top()==num[B]){s.pop();B++;}
				else if (A<=n) {s.push(A++);}
				 else { ok = 0;break;}
			}
			if(ok)
				cout<<"Yes\n";
			else
				cout<<"No\n";
			
		}
		cout<<"\n";
	}
	return 0;
}


posted @ 2015-05-16 16:37  编程菌  阅读(237)  评论(0编辑  收藏  举报