【BFS】bzoj1054 [HAOI2008]移动玩具
暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死。
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]移动玩具的更多相关文章
- [BZOJ1054][HAOI2008]移动玩具 bfs+hash
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2432 Solved: 1355[Submit][Stat ...
- bzoj1054: [HAOI2008]移动玩具
hash+bfs:要注意特殊情况.(似乎连sort.lower_bound都不用数据小直接判重了... #include<cstdio> #include<cstring> # ...
- bzoj1054: [HAOI2008]移动玩具 状压+爆搜即可
题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初的玩具状态 ...
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
[BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...
- P4289 [HAOI2008]移动玩具(bfs)
P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...
- 【BZOJ1054】[HAOI2008]移动玩具
[BZOJ1054][HAOI2008]移动玩具 题面 bzoj 洛谷 题解 太\(sb\)了,不想写了,直接点开洛谷题面单击右边蓝色按钮题解即可
- bzoj 1054: [HAOI2008]移动玩具 bfs
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 在 ...
- BZOJ 1054 [HAOI2008]移动玩具
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1388 Solved: 764[Submit][Statu ...
- P4289 【一本通提高篇广搜的优化技巧】[HAOI2008]移动玩具
[HAOI2008]移动玩具 题目描述 在一个 4 × 4 4\times4 4×4 的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方 ...
随机推荐
- ubuntu gnome桌面秀
之前装的是ubuntu14.10gnome版的 然后一路升级成15.04,到今天的15.10 最后发现现在的gnome桌面已经非常适合我的工作了 先放一张图,这是我的桌面 原来使用ubuntu15.0 ...
- oracle to_char 返回毫秒级
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1, 关键在 systimestamp
- 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5405 题意: 给你一棵n个节点的树,有点权. 要求支持两种操作: 操作1:更改某个节点的 ...
- vim的各种tips
centos系统,修改vim的配置文件 /etc/vimrc 添加如下内容: 1) 打开 vimrc ,添加以下语句来使得语法高亮显示: syntax on 2) 如果此时语法还是没有高亮显示,那么在 ...
- django自带的django.core.mail模块实现发邮件的功能
django自带了一个模块,可以实现发邮件的功能.如果项目开发遇到需要发邮件进行验证的时候可以用到. 1.先要准备发件人 发邮件需要使用SMTP.SMTP是什么呢? 简单邮件传输协议(Simple M ...
- Disruptor Ringbuffer
系列译文: http://ifeve.com/disruptor/ 当有多个消费者时,(按Disruptor的设计)每个消费者各自控制自己的指针,依次读取每个Slot(也就是每个消费者都会读取到所有的 ...
- SQL Server 2008的MSSQLSERVER 请求失败或服务未及时响应
我的是SQL server 2008R2, 以前可以正常的启动SQL server(SQLEXPRESS).SQL server(MSSQLSERVER),有几天没有打开了,就在昨天 开机之后就无法启 ...
- asp.net获取相对文件的绝对路径
HttpContext.Current.Server.MapPath("/sign/");
- Jmeter+Jenkins持续集成(Ant运行脚本)
Jmeter接口测试脚本运行后生成的是jtl(xml)格式的文件,这些文件不具备可读性,所以我们要把他转化为可以阅读的html格式报告. Ant是一个功能强大的打包编译工具.我们使用他的目的是将xml ...
- Simditor学习--vuejs集成simditor
唠叨 因为项目需要我自己研究了和集成在vue方便以后再使用,详情官方文档在这里.希望大家有好的建议提出让我继续改进. simditor介绍 Simditor 是团队协作工具 Tower 使用的富文本编 ...