1054: [HAOI2008]移动玩具

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2741  Solved: 1537
[Submit][Status][Discuss]

Description

  在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动
时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移
动到某人心中的目标状态。

Input

  前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空
行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。

Output

  一个整数,所需要的最少移动次数。

Sample Input

1111
0000
1110
0010

1010
0101
1010
0101

Sample Output

4

HINT

Source


提交地址BZOJ1054


题解 :

调了很久, 我还是太菜了;

就是广搜,没什么难度;

一个数组写错了调了半天QAQ;


Code:

 #include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std; int dx[]={, , , -, }, dy[]={, , , , -};
bool a[][], b[][]; inline int Hash(bool t[][])
{
int k = , s = ;
for (register int i = ; i <= ; i ++)
{
for (register int j = ; j <= ;j ++)
{
s += k * t[i][j];k <<= ;
}
}
return s;
} bool vis[]; struct date
{
bool o[][];
int stp;
}q[]; int main()
{
for (register int i = ; i <= ; i ++)
for (register int j = ; j <= ; j ++)
scanf("%1d", &a[i][j]), q[].o[i][j] = a[i][j];
for (register int i = ; i <= ; i ++)
for (register int j = ; j <= ; j ++)
scanf("%1d", &b[i][j]); int beg = Hash(a), end = Hash(b);
if (beg == end) {puts("");return ;}
vis[beg] = ;
int l = , r = ;
while (l < r)
{
for (register int i = ; i <= ; i ++)
{
for (register int j = ; j <= ; j ++)
{
if (!q[l].o[i][j]) continue;
for (register int k = ; k <= ; k ++)
{
int x = i + dx[k], y = j + dy[k];
if (q[l].o[x][y]) continue;
if (x <= or y <= or x > or y > ) continue;
swap(q[l].o[i][j], q[l].o[x][y]);
int H = Hash(q[l].o);
if (!vis[H])
{
if (H == end) {printf("%d\n", q[l].stp +);return ;}
vis[H] = ;
memcpy(q[r].o, q[l].o, sizeof q[r].o);
q[r].stp = q[l].stp + ;
r++;
}
swap(q[l].o[i][j], q[l].o[x][y]);
}
}
}
l++;
}
return ;
}

[BZOJ1054] 移动玩具的更多相关文章

  1. 【BZOJ1054】[HAOI2008]移动玩具

    [BZOJ1054][HAOI2008]移动玩具 题面 bzoj 洛谷 题解 太\(sb\)了,不想写了,直接点开洛谷题面单击右边蓝色按钮题解即可

  2. 【BZOJ1054】移动玩具(搜索)

    [BZOJ1054]移动玩具(搜索) 题面 BZOJ 洛谷 题解 这种小清新搜索题写出来好舒服啊. 要是原来的我来写代码肯定又臭又长吧.. #include<cstdio> #includ ...

  3. 【BZOJ1054】[HAOI2008]移动玩具 BFS

    [BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...

  4. bzoj1054: [HAOI2008]移动玩具

    hash+bfs:要注意特殊情况.(似乎连sort.lower_bound都不用数据小直接判重了... #include<cstdio> #include<cstring> # ...

  5. bzoj1054: [HAOI2008]移动玩具 状压+爆搜即可

    题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初的玩具状态 ...

  6. [BZOJ1054][HAOI2008]移动玩具 bfs+hash

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2432  Solved: 1355[Submit][Stat ...

  7. 【BFS】bzoj1054 [HAOI2008]移动玩具

    暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死. Code: #include<cstdio> #include<queue> #include<set> # ...

  8. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  9. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

随机推荐

  1. 认识HTML和CSS

    1.认识HTML标记 HTML的全称是Hyper text markup language,超文本标记语言,用于定义文档的内容结构.在HTML中,所有的标记都是成对出现的. <html>标 ...

  2. Jenkins把GitHub项目做成Docker镜像

    本文是<Jenkins流水线(pipeline)实战>系列的第三篇,前面已对Jenkins流水线有了基本认识,也试过从GitHub下载pipeline脚本并执行,今天的实战是编写一段pip ...

  3. [VB.NET Tips]对于基本数据类型的提示

    1.类型字符 有时需要直接量后面加上类型字符以明确指定类型,下面把常用的类型字符列出来 类型 字符 Short S Integer I Long L Decimal D Char c Single F ...

  4. MyBatis 插件使用-简单的分页插件

    目录 1 分页参数的传递 2 实现 Interceptor 接口 2.1 Interceptor 接口说明 2.1 注解说明 2.3 实现分页接口 PageInterceptor 3. 更改配置 4 ...

  5. Windows认证 | 域认证

    在Windows中的身份认证方式有很多,也在不断的升级,但是在域中,依旧使用的是Kerberos认证. Kerberos 是一种网络认证协议,它的实现不依赖于主机操作系统的认证,无需基于主机地址的信任 ...

  6. Maven 梳理 -聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...

  7. Spring MVC-从零开始-@RequestMapping 注解headers 属性

    package com.jt; import org.springframework.stereotype.Controller; import org.springframework.web.bin ...

  8. 读《深入理解Elasticsearch》点滴-对象类型、嵌套文档、父子关系

    一.对象类型 1.mapping定义文件 "title":{ "type":"text" }, "edition":{ ...

  9. 限制页面被pc端访问

    在需要被pc端访问的页面的脚本里加上如下代码即可: <script>var system = {}; var p = navigator.platform; var u = navigat ...

  10. Mysql触发器实例分析

    所谓触发器,就是在定义在表对象上.当触发器所在的表出现指定的事件时,会触发对应表的delete update insert的操作.说的有点绕口,其实就是到监视某种情况,然后去触发某种操作. 触发器是如 ...