您的位置:首页 > 大数据 > 人工智能

POJ 1363 Rails

2012-07-19 11:51 417 查看
题意:就是1...N的数按顺序入栈,看给定的输入是否是合法的出栈顺序,只要模拟就可以了。

思路:按照给出的出栈顺序,一个一个和和当前栈顶的元素比较,不相等就向当前栈压入一个元素,因为是按照顺序压栈的,所以总会找到一个当前给出的顺序所在位置值一样的栈顶元素,然后出栈。同时 给出的元素顺序也后移一位 直到给出的顺序遍历完 或者出错。
输入:

5 //5个数入栈
1 2 3 4 5 //出栈顺序
5 4 1 2 3 //出栈顺序
0 //5个数的结束
6 //6个数的入栈
6 5 4 3 2 1
0 //6个数的结束
0 //输入结束

题目链接http://poj.org/problem?id=1363

View Code

#include <stdio.h>
int max=1010;
int n,t[1010];
int main()
{

while(scanf("%d",&n)&&n!=0)
{

while(scanf("%d",&t[1])&&t[1]!=0)
{
int stack[max],top=0;
int a=1,b=1,i;
for(i=2;i<=n;i++)
scanf("%d",&t[i]);
int ok=1;
while(b<n)
{
if(a==t[b])
{
a++;b++;
}
else if(top&&stack[top]==t[b])
{
top--;
b++;
}
else if(a<=n)
{
stack[++top]=a++;
}
else
{
ok=0;break;
}
}
printf("%s\n",ok?"Yes":"No");
}
printf("\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: