【问题描述】

华容道是一种有趣的滑块游戏,大概是下面这个样子的。

游戏局面由一个2*2的曹操滑块,五个2*1的蜀将滑块(横竖是不定的)、四个1*1的小兵滑块以及两个空的位置构成,玩家需要利用空的位子移动滑块,使得曹操逃离华容道,即使得滑块到达最下面一行的正中间,如上面的第二张图所示。

在游戏过程中,任意一个滑块均不可以旋转或跳跃,在任意时刻都不可以分割,滑块之间不能重叠,这也就是说,游戏过程中,我们只能利用局面中的两个空位来平移各个滑块。

举个例子,在上图中,第一张图的曹操可以往下移,关羽可以往上移,从上往下数第四行的小兵也可以往左移动,而对于第三张图,曹操可以往下移,第四行的小兵可以向左移,最后一行的小兵可以先向上移动、再向右移动,然而在该局面下,左边的马超不可以向右平移。

为了方便,我们记一步为使某个滑块平移一个单位的距离,比如在上面第一张图中,将曹操往下平移和将关羽往上平移都记为一步,而第四行第三列的小兵如果移动到第四行第一列,那么就算作两步,同样,第二幅图中的马超如果往下移到底,这个过程也算作两步。

现在,给定一个局面,你的任务就是用最少的步数使得曹操逃离华容道,如果无法做到这一点,那么便输出-1。

【输入格式】

第一行一个正整数T,表示数据组数。

接下来T组数据,每组数据5行,每行4个数,描述待求解的华容道的局面。其中,0表示空位,1表示小兵,2表示曹操,3到7五个数字分别表示五个蜀将的滑块,每个数字出现的位置就表示这个滑块在局面中占据的位置,两组相邻数据间用一空行隔开。

【输出格式】

对每组数据输出一行一个整数,表示使得曹操逃离华容道的最少步数,或者一个-1表示曹操无法逃离华容道。

【样例输入】
3
3 3 1 4
5 6 1 4
5 6 7 7
0 2 2 1
0 2 2 1 3 3 4 4
5 5 6 6
1 1 7 7
1 0 2 2
1 0 2 2 3 2 2 4
3 2 2 4
5 6 6 7
5 1 1 7
1 0 0 1
【样例输出】
0
1
116
【数据规模与约定】

对于40%的数据,T=1。

对于60%的数据,T<=2。

对于80%的数据,T<=3。

对于100%的数据,1<=T<=4,所给局面中一定有两个0,四个1,2所占据的位置一定是一个2*2正方形,3到7每个数字均各自占据相邻的两格(不保证每个数字占据的两格是横的还是竖的)。

题目分析

首先这出题者是谁?你出来我保证不打死你。我们做题之前先来了解一下华容道是什么?和2048有点像,需要让CC在最快的时间内到达最下方的中间位置。这个棋盘是4*5的,我们的人物有CC,五虎将云长翼德子龙孟起和汉升,最后是四个小兵我们叫他们伯常仲常季常和叔常。现在三国的故事线完整了,虽然在赤壁大战时,孟起和汉升都不在,但这不是重点,我博学多才,精通高等数学高等生物,饱读诗书,如果你不知道X常是谁,没关系,幼常是那个挥泪的,懂了吧。

这一题看到就知道是爆搜了,怎么搜呢?map压缩状态记忆化即可,想起来我没有说过记忆化,真是抱歉啊。以后我还会写一下dancing line算法,我立FLAG在这里。我们发现问题的关键在关羽,因为关羽是最难走的。这是一道非常恶心变态的模拟题加搜索,NOI第二题难度。这一题原来是NOIP2013的第六题。

代码实现

你们不会想看我的代码的,我是面向数据编程。

代码分析

OK,我现在知道怎么写这一题了,这是一道迭代加深搜索题。中间状压加估值函数。

本来要写一些别的,我这么窝囊,不敢写了。

【FZSZ2017暑假提高组Day1】华容道游戏的更多相关文章

  1. 【FZSZ2017暑假提高组Day1】确定小组

    [问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...

  2. 【FZSZ2017暑假提高组Day1】最大矩形

    [问题描述] 现在有n个宽度为1的矩形按如下图(左边的)所示的方式排在了一起: 用肉眼容易看出,在左图内部面积最大的矩形如右图绿色部分所标注. 现在我们考虑将其中一些宽度为1的矩形取出,按照原顺序再次 ...

  3. [NOIP2011提高组day1]-3-mayan游戏

    3.Mayan 游戏 (mayan.cpp/c/pas) [问题描述] Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  4. 【FZSZ2017暑假提高组Day2】圆盘时钟

    [问题描述] 作为出题人的小Z相信大家对上图这样的圆盘时钟都不会陌生——在理想圆盘时钟上,秒针每一分钟转一圈,分针每一小时转一圈,时针每12小时转一圈,它们均是匀速转动的,在0点时三条针均指向表盘上的 ...

  5. Noip2011 提高组 Day1 T3 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  6. GZOJ 1361. 国王游戏【NOIP2012提高组DAY1】

    国王游戏[NOIP2012提高组DAY1] Time Limit:1000MS Memory Limit:128000K Description 国王游戏(game.cpp/c/pas) [问题描述] ...

  7. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  8. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  9. 18/9/9牛客网提高组Day1

    牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30%  qwq #include<algorithm> #in ...

随机推荐

  1. JAVA学习笔记系列4-Eclipse版本选择

    下载Eclipse需要根据安装的JDK的版本来决定是安装32位还是64位,不是根据操作系统选的.

  2. 疑问:VS在调试的过程中,总是会提示正在加载picface.dll的符号,然后卡死在那

    环境: 硬件环境: PC 软件环境: Windows7 VS2012 MFC程序调试 现象: 调试的过程中,提示“正在从以下目录加载picface.dll的符号:C:\windows\dll”,然后就 ...

  3. python day 25--正则表达式

    一.字符组 1.[0-9]表示匹配0-9中的数字 2.[a-z]表示匹配a-z之间的字母 3.[A-Z]表示匹配大写的字母 4.[0-9a-zA-Z]匹配所有字母数字 二.元字符 1.\d 匹配任意数 ...

  4. 安装pitchpork 及 pacbioscience 的问题及解决

    1. error while loading shared libraries: libpbbam.so: cannot open shared 解决: find -name  libpbbam.so ...

  5. iOS 证书申请和使用详解(详细版)阅读

    对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Certification(证书) ...

  6. Redis配置文件 redis.conf 解读(一)

    # Redis configuration file example# redis配置文件模板# Note on units: when memory size is needed, it is po ...

  7. 条件分支语句(SWICH语句)

    语法 swich(条件表达式){ Case 表达式: 语句……. Break; Case 表达式: 语句……. Break; Case 表达式: 语句……. Break; default: 语句……. ...

  8. document.ready(function(){}),window.onload,$(function(){})的区别

    https://blog.csdn.net/qkzhx0516/article/details/79236514

  9. redux进一步优化

    1. 将原来的  mapStateToDispatch  中的函数提取出来,放在组件中, 如原来的: function mapStateToProps(state, ownProps) { retur ...

  10. PythonStudy——机器语言 Machine Language

    编程语言 编程语言(programming language),是用来定义计算机程序的形式语言.它是一种被标准化的交流技巧,用来向计算机发出指令.一种计算机语言让程序员能够准确地定义计算机所需要使用的 ...