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

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. 大话Spring Cloud

    研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...

  2. python之计算器

    开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...

  3. linux dpm机制分析(上)【转】

    转自:http://blog.csdn.net/lixiaojie1012/article/details/23707681 1      DPM介绍 1.1        Dpm:  设备电源管理, ...

  4. ACE_Reactor类

    .ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 对一个文件描述符指定的文件或设备的操作, 有两种工作方式: 阻塞与非阻塞. 在设计服务端程序时,如果采用阻塞模式 ...

  5. aspxpivotgrid排序

    protected virtual void SetSortBySummary() { foreach (PivotGridField field in grid.Fields) { if (fiel ...

  6. linux命令(24):find命令

    1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参数: pathname: ...

  7. LockSupport学习

    LockSupport工具类定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能.Java锁和同步器框架的核心工具类AQS:AbstractQueueSynchronizer,就是通过调 ...

  8. resteasy json

    https://www.cnblogs.com/toSeeMyDream/p/5763725.html

  9. review的一个收获popstate,addEventListener:false ,split,jquery cache

    一.popstate:记录url历史变化 二.document.location.hash:锚点后面的东西 三.addEventListener:false 是否在捕获或者冒泡事件中执行 强转换 四. ...

  10. virtualenv--创建虚拟环境

    一.virtualenv 优点 1.使用不同应用开发环境独立 2.环境升级不影响其他应用,也不会影响全局的python 环境二.安装 pip install virtualenv 三.使用virtua ...