BZOJ 1054: [HAOI2008]移动玩具(bfs)
题面:
https://www.lydsy.com/JudgeOnline/problem.php?id=1054
题解:
将每一种状态十六位压成二进制,然后bfs。。不解释。。
p.s.注意特判初始==目标;
代码:
#include<bits/stdc++.h>
using namespace std;
const int mx[]={,,-,,},my[]={,,,-,};
int g[][],last,ans,vis[];
char ch[][];
struct node{
int w,dep;
};
queue<node>q;
void back(int x){
for(int i=;i;i--)
for(int j=;j;j--)
g[i][j]=x&,x>>=;
}
int to(){
int sum=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
sum<<=,sum+=g[i][j];
return sum;
}
void bfs(){
while(!q.empty()){
node h=q.front();
q.pop();
back(h.w);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(g[i][j])
for(int k=;k<=;k++){
int xx=i+mx[k],yy=j+my[k];
if(xx>&&xx<&&yy>&&yy<&&!g[xx][yy]){
g[xx][yy]^=,g[i][j]^=;
int tt=to();
if(tt==last){
ans=h.dep+;
return ;
}
if(!vis[tt])
q.push((node){tt,h.dep+}),vis[tt]=;
g[xx][yy]^=,g[i][j]^=;
}
}
}
}
int main(){
for(int i=;i<=;i++)
scanf("%s",ch[i]+);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
g[i][j]=ch[i][j]-'';
int tt=to();
q.push((node){tt,});
vis[tt]=;
for(int i=;i<=;i++)
scanf("%s",ch[i]+);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
g[i][j]=ch[i][j]-'';
last=to();
if(last==tt){
printf("");
return ;
}
bfs();
printf("%d",ans);
return ;
}
BZOJ 1054: [HAOI2008]移动玩具(bfs)的更多相关文章
- 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 ...
- [BZOJ1054][HAOI2008]移动玩具 bfs+hash
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2432 Solved: 1355[Submit][Stat ...
- 1054: [HAOI2008]移动玩具
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1272 Solved: 690[Submit][Statu ...
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
[BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...
- 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)
http://www.lydsy.com/JudgeOnline/problem.php?id=1054 一开始我还以为要双向广搜....但是很水的数据,不需要了. 直接bfs+hash判重即可. # ...
- 1054: [HAOI2008]移动玩具 - BZOJ
Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...
- 1054. [HAOI2008]移动玩具【BFS】
Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移 ...
- [HAOI 2005][BZOJ 1054] 移动玩具
先贴一波题面 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2288 Solved: 1270 Descr ...
随机推荐
- Oracle 不小心删除undo数据文件以及磁盘空间不足导致不能登录的解决办法
在一次测试中,由于导入的数据量过大导致事务一直提交失败因为磁盘空间不够用了,一检查发现是undo表空间不够用,于是重新创建了一个表空间,准备把之前的undo表空间删除,删除时却发现一直删不掉,因为它一 ...
- 【学亮开讲】Oracle存储过程教学笔记(一)20181115
--创建业主序列起始值为11 ; --不带传出参数的存储过程 create or replace procedure pro_owners_add ( v_name varchar2,--名称 v_a ...
- .Net的EF+MVC框架使用T4生成各个层的代码的,在新增表的时候,调不到新增的实体
如果确认有这个实体的话,只需要把T4模板全部重新生成就可以了
- centOS 7下无法启动网络(service network start)错误解决办法
今天在centOS 7下更改完静态ip后发现network服务重启不了,翻遍了网络,尝试了各种方法,终于解决了. 现把各种解决方法归纳整理,希望能让后面的同学少走点歪路... 首先看问题:执行serv ...
- docker学习笔记二
知识点: 1)手动构建镜像 2)Dockerfile快速构建镜像 阿里云yum源https://opsx.alibaba.com/mirror 镜像制作nginx镜像实例 创建并运行centos容器 ...
- PHPStorm从入门到精通
1. 使用phpstorm+xdebug进行调试 首先,安装php的xdebug扩展 查看phpinfo中php的版本,php的安装位数,php的是否线程安全:根据这些下载对应的xdebug.dll ...
- Attention Model
参考1: https://blog.csdn.net/malefactor/article/details/50550211 attention部分实现: https://blog.csdn.net ...
- Jenkins+PowerShell持续集成环境搭建(八)邮件通知
1. 默认邮件功能: Jenkins自带的邮件功能比较简单,配置如下: 设置默认发件人地址: 2. Email Extension Plugin 为了能够更加灵活地使用邮件功能,需要安装Email E ...
- C 语言----- 指针
指针是一个值为内存地址的变量, 指针的核心是它是一个变量, 只不过它是用来存放内存地址的, 所以在了解指针之前,先说一下什么是变量.变量就是在内存中开辟的一个空间.如int year, 就是在内存中开 ...
- 了解AutoCAD对象层次结构 —— 3 ——数据库
数据库的结构是什么样的?对象是如何存储在数据库中的?这些问题我们需要搞明白.在此我们可以借助工具ArxDbg或MgdDbg来查看数据库结构及其内容.下图就是利用MgdDbg工具查看到的内容,我们可以看 ...