暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死。

Code:

 #include<cstdio>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
const int di[]={,,-,},dj[]={-,,,};
struct Squ{char S[][];};
struct Node{Squ v;int d;Node(const Squ &a,const int &b){v=a;d=b;}Node(){}};
bool operator < (const Squ &a,const Squ &b)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(a.S[i][j]<b.S[i][j])
return true;
else if(a.S[i][j]>b.S[i][j])
return false;
return false;
}
bool operator == (const Squ &a,const Squ &b)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(a.S[i][j]!=b.S[i][j])
return false;
return true;
}
Squ from,to;
set<Squ>Set;
queue<Node>q;
inline bool check(const int &x,const int &y)
{
if(x>=&&x<&&y>=&&y<&&q.front().v.S[x][y]=='')
return true;
return false;
}
inline void work(const Squ &tmp)
{
if(Set.find(tmp)==Set.end())
{
if(tmp==to)
{
printf("%d\n",q.front().d+);
exit();
}
Set.insert(tmp);
q.push(Node(tmp,q.front().d+));
}
}
int main()
{
for(int i=;i<;i++)scanf("%s",from.S[i]);
for(int i=;i<;i++)scanf("%s",to.S[i]);
if(from==to){printf("0\n");return ;}
q.push(Node(from,));
Set.insert(from);
while(!q.empty())
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(q.front().v.S[i][j]=='')
{
for(int k=;k<;k++)
{
int ti=i+di[k],tj=j+dj[k];
if(check(ti,tj))
{
Squ tmp=q.front().v;
swap(tmp.S[i][j],tmp.S[ti][tj]);
work(tmp);
}
}
}
q.pop();
}
return ;
}

【BFS】bzoj1054 [HAOI2008]移动玩具的更多相关文章

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

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

  2. bzoj1054: [HAOI2008]移动玩具

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

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

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

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

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

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

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

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

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

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

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

  8. BZOJ 1054 [HAOI2008]移动玩具

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

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

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

随机推荐

  1. WinRAR分割超大文件

    在自己的硬盘上有一个比较大的文件,想把它从网上通过E-Mail发送给朋友时,却发现对方的收信服务器不能够支持那么大的文件……,这时即使用ZIP等压缩软件也无济于事,因为该文件本身已经被压缩过了.于是许 ...

  2. vue双向数据绑定的原理-object.defineProperty() 用法

    有关双向数据绑定的原理 关于数据双向绑定的理解:利用了 Object.defineProperty() 这个方法重新给对象定义了新属性,在操作新属性分别为为获取属性值(调用get方法)和设置属性值(调 ...

  3. 通过编译函数库来学习GCC【转】

    转自:http://blog.csdn.net/u012365926/article/details/51446295 基本概念 什么是库 在windows平台和linux平台下都大量存在着库. 本质 ...

  4. ERROR: do not initialise statics to false

    Question about git commit rule I git commit a patch, The patch has a "static int xxxxxxxxxxxxxx ...

  5. 定制LFS镜像及安装过程

    定制LFS镜像及安装过程 http://blog.csdn.net/decload/article/details/7407698 一.定制LFS镜像        定制LFS镜像的思想是在已构建完成 ...

  6. selenium WebElement 的属性和方法 属性

    tag_name 标签名,例如 'a'表示<a>元素get_attribute(name) 该元素name 属性的值text 该元素内的文本,例如<span>hello< ...

  7. Sql Server 2014/2012/2008/2005 数据库还原出现 3154错误的解决办法

    在Sql Server  数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方法 ...

  8. CNN中千奇百怪的卷积方式大汇总

    1.原始版本 最早的卷积方式还没有任何骚套路,那就也没什么好说的了. 见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络. 附上一个卷积详细流程: [TensorFlow]tf.nn.co ...

  9. HDU 4768: Flyer

    题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2...  && A+k*C <= B).题目保证最多有一个人收到的传单数是奇数. ...

  10. java中的i++与++i有什么区别?

    刚开始接触时,做了一些小测试,还以为这两个没有什么区别. public class OperatorDemo { public static void main(String[] args){ int ...