这又是一道神奇的搜索题。。。只要记录每种状态。。。然后暴力判断这种状态往后一步的情况。。。

广搜出最优解即可。。。

呆码:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std; int dx[]={,,,,-};
int dy[]={,,,-,};
int dis[];
char st[];
bool use[]; struct asd{
int a[][],num;
int sum() {
int tot=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
tot+=(a[i][j]<<*(i-)+j-);
return tot;
}
void read() {
for(int i=;i<=;i++)
{
scanf("%s",st);
for(int j=;j<=;j++)
a[i][j]=(st[j-]=='' ? : );
}
num=sum();
}
}s,t; inline int BFS()
{
memset(dis,,sizeof(dis));
queue <asd> q;
q.push(s); dis[s.num]=; use[s.num]=;
while(!q.empty())
{
asd now=q.front(); q.pop();
for(int x=;x<=;x++)
for(int y=;y<=;y++)
if(now.a[x][y])
for(int i=;i<=;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>= && xx<= && yy>= && yy<= && !now.a[xx][yy])
{
swap(now.a[xx][yy],now.a[x][y]);
asd u=now; u.num=u.sum();
swap(now.a[xx][yy],now.a[x][y]);
if(!use[u.num])
{
dis[u.num]=dis[now.num]+;
if(u.num==t.num) return dis[t.num];
q.push(u); use[u.num]=;
}
}
}
}
return dis[t.num];
} int main()
{
s.read(); t.read();
if(s.num==t.num) printf("0\n");
else printf("%d\n",BFS());
}

代码

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

  1. bzoj 1054: [HAOI2008]移动玩具 bfs

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 在 ...

  2. bzoj1054: [HAOI2008]移动玩具

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

  3. BZOJ 1054 [HAOI2008]移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1388  Solved: 764[Submit][Statu ...

  4. 1054: [HAOI2008]移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1272  Solved: 690[Submit][Statu ...

  5. P4289 [HAOI2008]移动玩具(bfs)

    P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...

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

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

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

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

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

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

  9. P4289 【一本通提高篇广搜的优化技巧】[HAOI2008]移动玩具

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

  10. 【BZOJ】【1055】【HAOI2008】玩具取名

    区间DP/记忆化搜索 sigh……看了提示才想到是区间DP >_>我果然还是太弱 f[l][r][k]表示L到R这段区间能否合并成K,那么就是枚举拆分方案(从哪里断开)和组合方式(左半合成 ...

随机推荐

  1. Unity3D制作红色射线

    1.在发射射线的位置创建一个空物体用于存储发射点的位置信息. 2.制作射线,为发射射线物体添加LineRenderer组件  制作Material材质并把其类型改为Particles/Addictiv ...

  2. 使用ODP.NET连接Oracle数据库

    项目需要和第三方进行对接,奇葩的是地方没给提供接口,却提供了一个Oracle的视图 所以有了C#访问Oracle数据库的需求 1.打开nuget,安装驱动 https://www.nuget.org/ ...

  3. C、C++中的static和extern关键字

    1.首先,关于声明和定义的区别 这种写法(函数原型后加;号表示结束的写法)只能叫函数声明而不能叫函数定义,只有带函数体的声明才叫定义,比如下面 只有分配存储空间的变量声明才叫变量定义,其实函数也是一样 ...

  4. 线段树(segment_tree)

    线段树之——区间修改区间查询 1.概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lgN). 线段树是 ...

  5. error CS1002: ; expected 错误解决

    一般出现这种错误,大概原因是因为前端页面里的C#代码少个分号,或少个括号 导致编译器出错:仔细检查页面中的C#代码是否写的正确. 我之所以出现这个错误是因为前台页面中:@{  } 这里的代码少一个括号 ...

  6. Http 状态码:

    消息 100 Continue 101 Switching Protocols 102 Processing 成功 200 OK 201 Created 202 Accepted 203 Non-Au ...

  7. java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig

    使用 MockMvc 模拟进行单元测试时出现以下的错误,网上看到的资料应该是说Spring4.0需要servlet3.0的支持? 在pom.xml更改servlet的版本依赖后即可

  8. 11-类中的__call__函数

    __call__是一个很神奇的特性,只要某个类型中有__call__方法,,我们可以把这个类型的对象当作函数来使用. 举例: >>>class Reader(): def __ini ...

  9. 关于java类加载机制的一些理解

    关于java的类加载机制加载顺序,这个东西可以说是基础的东西,不过很遗憾这方面很多人也都不是很在意,比如我自己,最近上班闲下来了,就开始看一些博客文章了,今天恰好被一篇博文给吸引了,并且他的示例题一开 ...

  10. 如何使用git拉取代码及提交代码(详细)

    分享给刚进入公司的小伙伴们鸭! 第一步:首先在本地安装git和TorToiseGit小乌龟,svn同理,也可以安装下TorToiseGit中文语言包,前期可减少出错,后期熟悉了可直接用命令行pull代 ...