您的位置:首页 > 其它

NYOJ 93 汉诺塔(三)

2014-11-07 11:51 197 查看

汉诺塔(三)

题目来源:点击打开链接

题目信息:这道题也是模拟栈的操作,用数组栈表示三根针,先将所有的金片全部放到一号针上,然后用栈的基本操作模拟金片的指令,定义一个k作为标记,判断是否合法。

源代码:

#include<stdio.h>
#include<stack>
using namespace std;

int main()
{
int n;
int p,q;
int a,b;
scanf("%d",&n);
while(n--)
{
stack<int>S[4];   //定义数组栈,这里需要注意,和数组一样,需要定义的比实际大些。
scanf("%d%d",&p,&q);
int i;
for(i=p;i>0;i--)
S[1].push(i);   //将所有金片初始在1号针上
int k=1;      //定义一个标记
for(i=1;i<=q;i++)
{
scanf("%d%d",&a,&b);
if(S[a].empty())    //非法指令1
{
k=0;
break;
}
if(!S[b].empty()&&S[a].top()>S[b].top())   //非法指令二
{
k=0;
break;
}
S[b].push(S[a].top());
S[a].pop();
}
if(k==0)
printf("illegal\n");
else
printf("legal\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: