HDU 1997汉诺塔VII
又是汉诺塔~
回顾一下汉诺塔的移动过程。
从左到右设为A,B,C 3个盘子的时候
1: No.1 A -> C
2: No.2 A -> B
3: No.1 C -> B
4: No.3 A -> C
5: No.1 B -> A
6: No.2 B -> C
7: No.1 A -> C
.把第n个盘子移动到C前,第n-1个盘子要移动到B。也就是说,此时,如果第n-1个盘子在 C就是错误的,而第n个盘子在B就是错误的。那么就可以进行递归判断。调用check(intn,int A,int B,int C) A为移动的起点,C为终点。此时的盘子只能在A或者C上。
若n在A上,那么第n-1个要么在B上要么在A上,绝不可能在C上。换句话说,此时起点应该为A,而终点为B。所以调用改为:check(n-1,A,C,B);
若n在C上,那么第n-1 要么在B上,要么在C上,绝不可能在A上,换句话说,此时起点应该为B,而终点为C。 check(n-1,B,A,C);
#include <cstdio>
#include <cstring>
const int MAXN=64+10;
int a[4][MAXN],cur[4];
bool flag;
void check(int n,int A,int B,int C)
{
if(n==0) { flag=true; return ;}
if(a[A][cur[A]]==n)
{
cur[A]++;
check(n-1,A,C,B);
}
else if(a[C][cur[C]]==n)
{
cur[C]++;
check(n-1,B,A,C);
}
else { flag=false; return ;}
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
for(int i=1;i<=3;i++)
{
scanf("%d",&a[i][0]);
for(int j=1;j<=a[i][0];j++)
scanf("%d",&a[i][j]);
}
cur[1]=cur[2]=cur[3]=1;
flag=false;
check(n,1,2,3);
if(flag)
printf("true\n");
else
printf("false\n");
}
return 0;
}
HDU 1997汉诺塔VII的更多相关文章
- HDU 1997 汉诺塔VII
题解参考博客: http://blog.csdn.net/hjd_love_zzt/article/details/9897281 #include <cstdio> ],yes; int ...
- 汉诺塔VII(递推,模拟)
汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU 1207 汉诺塔II (找规律,递推)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 2077 汉诺塔IV (递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2077 还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是 ...
- HDU 2064 汉诺塔III (递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到 ...
- HDU 2064 汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2064 汉诺塔III(递归)
题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘 ...
- HDU 1207 汉诺塔II (递推)
经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...
- hdu 1207 汉诺塔II (DP+递推)
汉诺塔II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- [BZOJ4184]shallot 线段树+线性基
链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...
- a标签中的javascript:;是什么
a标签中的javascript:;是什么 一.问题 <a>标签中href="javascript:;"表示什么意思?? <a id="jsPswEdit ...
- python3 requests 模块 json参数和data参数区别
json 表示使用application/json方式提交请求 data 使用application/form-urlencode方式提交请求
- CMDB学习之四 ——DEBUG模式
定义一个debug,进行解析调试,到测试文件 配置文件,配置debug模式,定义环境变量, #!/usr/bin/env python # -*- coding:utf-8 -*- import os ...
- iOS报错 -pie can only be used when targeting iOS 4.2 or later
近期,使用师兄的project时.突然报错之前没发现这个错误.信息例如以下: ld: -pie can only be used when targeting iOS 4.2 or later cla ...
- highcharts 阶梯图表并填充颜色(自己觉得:直角折线图表)
例如以下:普通阶梯图 $(function () { $('#container').highcharts({ title: { text: '普通阶梯图' ...
- Git管理软件
软件下载地址 首先下载库 https://code.google.com/p/msysgit/ 接着安装 https://code.google.com/p/tortoisegit/ 然后就能够用了
- Windows简单入门-送给第一次使用电脑的朋友
序言 写本篇文章前.不得不说我已经好久没有写博客了,快接近3个月了 吧,本来去年说參加今年的博客之星的,结果这都立即结束了:不得不说对自己有些嘲讽. 本篇文章是纯小白文章.之所以写这个是由于前段时间妹 ...
- activity-启动动画的设定(下面弹出出现,弹入下面消失)
1.今天为了把一个activity以dialog的形式显示,而且实现从开始的时候从底部往上弹出,结束的时候,从上往下消失,做了如下的工作. 1)如果把一个activity以dialog的形式显示? 这 ...
- jQuery post 传递 iframe
//使用POST链接iframe function doOpenPostIfrm(url, args, iframe) { //创建一个隐藏表单 var _form = $("<for ...