汉诺塔检错
来源:互联网 发布:二维码生成器软件 编辑:程序博客网 时间:2024/04/26 07:03
现在我们把三根针编号为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
样例输入
3
2 1
1 2
3 3
1 2
1 3
3 2
2 1
2 1
样例输出
legal
illegal
illegal
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
int main()
{freopen("A.txt","r",stdin);
int n;///有n组测试数据
cin>>n;
while(n--)
{
int s,c,i;///s为栈的盘子数,c为移动的次数
cin>>s>>c;stack<int>a[4];
for(i=s;i>=1;i--)
{
a[1].push(i);
}
int flag=1;int e,f;
for(i=c;i>0;i--)
{
cin>>e>>f;
if(a[e].empty()||(!a[f].empty()&&
a[f].top()<a[e].top()))
{
flag=0;cout<<"illegal"<<endl;break;
}
a[f].push(a[e].top());
a[e].pop();
}
if(flag)cout<<"legal"<<endl;
}
return 0;
}
- 汉诺塔检错
- CRC检错
- 开机硬盘检错
- 检错码CRC例解
- 码字的检错纠错
- pom文件检错级别
- 9*9乘法表检错
- C++使用内存泄漏检错
- 浅谈三种检错方式
- 检错码之海明码
- 检错码之奇偶校验编码
- 第十章 检错与纠错
- 关于检错、断言和容错性
- JavaBugChecker1.0(Java源代码检错工具)
- 数据链路层与检错码
- 一些常用的检错JS代码
- JSP,SQL一些小节,检错机制
- 网络检错MBProssHUD库的使用
- ios-九宫格布局
- 软件实习笔记二(Qt简单对话框实例开发)
- iOS 多线程的实现与使用(NSThread, NSOperation, GCD)
- 【详解】关于Xcode7.0或者iOS 9.0 (and later)的HTTP请求不能用的解决教程
- Android基础之获取activity当前view
- 汉诺塔检错
- Activity四种启动模式
- 集合的内存管理
- mysql权限存取过程
- JAVA 输入输出
- 并发性能测试
- Flash the Edsion to WW25
- 51单片机项目制发短信
- springMVC与jquery和ajax结合