NYOJ:93 汉诺塔(三)(简单栈)

来源:互联网 发布:彩田内衣淘宝店 编辑:程序博客网 时间:2024/06/09 11:46

汉诺塔(三)

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。


现在我们把三根针编号为1,2,3。

所有的金片在初始时都在1号针上,现在给你的任务是判断一系列的指令过程中,是否会出现非法的指令。

而非法指令有以下两种情况:

1、某个针上已经没有金片了,但是指令依然要求从该处移动金片到其它针上。

2、把一个大的金片移动到了小的金片上。

输入
第一行输入一个整数N表示测试数据的组数(N<10)
每组测试数据的第一行有两个整数P,Q(1<P<64,1<Q<100),分别表示汉诺塔的层数与随后指令的条数
随后的Q行,每行都输入两个整数a,b,(1<=a,b<=3)表示一条指令。
指令1 2表示把1号针最上面的金片移动到2号针最上面。
数据保证a,b不会相同。
输出
如果存在非法指令,请输出illegal
不存在非法指令则输出legal
样例输入
32 11 23 31 21 33 22 12 1
样例输出
legalillegalillegal
来源
[张云聪]原创
上传者
张云聪


题目大意:汉诺塔问题,给你一个系列命令(如1、2,就是将柱子1的最上面的盘子移到柱子2上),看这些命令是否合法,即是否符合汉诺塔的游戏规则。

解题思路:用栈来解决。用栈来堆放盘子(后进先出)。模拟下就行。


代码如下(较为粗糙):


#include <stdio.h>#include <stack>using namespace std;int main(){int t;scanf("%d",&t);while(t--){int p,q;stack<int>s1;//三个柱子 stack<int>s2;stack<int>s3;scanf("%d%d",&p,&q);for(int i=p;i>=1;i--)//初始化1号柱子 {s1.push(i);}int cnt=0;//记录合法的步骤数 for(int i=0;i<q;i++){int kai,jie;scanf("%d%d",&kai,&jie);if(kai==1){if(s1.empty())//源头是空的,肯定不行 {continue;}int b=s1.top();s1.pop();if(jie==2){if(s2.empty()){s2.push(b);cnt++;}else{if(s2.top()>b)//下面的盘子要比上面的盘子大 {s2.push(b);cnt++;}else{continue;}}}if(jie==3){if(s3.empty()){s3.push(b);cnt++;}else{if(s3.top()>b){s3.push(b);cnt++;}else{continue;}}}}if(kai==2){if(s2.empty()){continue;}int b=s2.top();s2.pop();if(jie==1){if(s1.empty()){s1.push(b);cnt++;}else{if(s1.top()>b){s1.push(b);cnt++;}else{continue;}}}if(jie==3){if(s3.empty()){s3.push(b);cnt++;}else{if(s3.top()>b){s3.push(b);cnt++;}else{continue;}}}}if(kai==3){if(s3.empty()){continue;}int b=s3.top();s3.pop();if(jie==2){if(s2.empty()){s2.push(b);cnt++;}else{if(s2.top()>b){s2.push(b);cnt++;}else{continue;}}}if(jie==1){if(s1.empty()){s1.push(b);cnt++;}else{if(s1.top()>b){s1.push(b);cnt++;}else{continue;}}}}}if(cnt==q)//合法步数等于命令条数 {printf("legal\n");}else{printf("illegal\n");}}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 有人要打我我该怎么办 很笨怎么办工作做不好 脸被电焊烤了疼怎么办 脸过敏痒的不行怎么办 领导想让你辞职怎么办 领导强吻我了怎么办 赫曼夏天温度高怎么办 近视看3d电影怎么办 有声挂图撕坏了怎么办 主机没有放光盘的设备怎么办 装显卡是没光驱怎么办 电脑机箱光盘总是出来怎么办 看书网作者密码忘记怎么办 电脑光驱访问出现出错怎么办 电脑不读dvd光盘怎么办 dvd光盘读不出来怎么办 光盘插在电脑里出不来怎么办 cad画斜线不光滑怎么办 ps没有魔棒工具怎么办 洗完鞋子发黄了怎么办 牛拜单车不退押金怎么办 总裁太爱我怎么办小说 小班走丢了怎么办ppt 走丢了怎么办 教案 ppt 小鸽子一大一小怎么办 烤八寸蛋糕胚表面上色严重怎么办 小班安全教案下雨打雷怎么办 幼儿园小班社会教案下雨打雷怎么办 两个月宝宝吃手怎么办 胳膊上长了个猴子怎么办 刚刚出壳的小鸡怎么办 南宁电动车牌被偷了怎么办 南宁电车车牌被偷了怎么办 电车车牌被偷了怎么办 上海电动车车牌被偷了怎么办 太子摩托车离合回的慢怎么办 指甲小月牙太少怎么办 牛仔裤用84泡了怎么办 蓝色的衣服晒红怎么办 厨房用的剪刀开合很紧怎么办 理发的剪刀钝了怎么办