博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ-93 汉诺塔(三)
阅读量:7256 次
发布时间:2019-06-29

本文共 1154 字,大约阅读时间需要 3 分钟。

 

汉诺塔(三)

时间限制:
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  3 #include
4 int main() 5 { 6 int n,p,q,i,j,flag; 7 int a[4][65]; 8 scanf("%d",&n); 9 while(n--)10 {11 flag=1;12 scanf("%d%d",&p,&q);13 for(i=1;i<=p;++i)//初始化第一个塔14 a[1][i]=p-i+1;15 a[1][0]=p;//每一维下标为0的存放顶层的编号16 a[2][0]=0;17 a[3][0]=0;18 while(q--)19 {20 scanf("%d%d",&i,&j);21 if(a[i][a[i][0]]&&(a[j][a[j][0]]==0||a[i][a[i][0]]

 

转载地址:http://kdkdm.baihongyu.com/

你可能感兴趣的文章
MySQL基础学习之视图
查看>>
Vim statusline设置
查看>>
蒙特卡罗算法并行计算
查看>>
Linq To Sql数据库操作基类实现不同条件的增删改查
查看>>
IDEA使用
查看>>
Length of Last Word
查看>>
Python与机器人技术
查看>>
Android 屏幕兼容性
查看>>
JDK 新特性
查看>>
正则表达式_matches(Regex)
查看>>
log代替system.out.println输出
查看>>
如何写爆炸性新闻 做好自媒体
查看>>
对象和数组的遍历方法
查看>>
Jmeter之root ca certificate 问题
查看>>
使用for--each遍历集合
查看>>
MySQL双主+keeplived安装部署说明
查看>>
基于HWND的Win32 UI自动化
查看>>
WebService 入门程序(一)
查看>>
深入计算机系统 练习题2.44 补码运算
查看>>
python 在linux下读取 .xlsx
查看>>