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 ...
随机推荐
- mysql sql执行计划
查看Mysql执行计划 使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show pro ...
- WSL Windows subsytem linux 的简单学习与使用
1. win10 1709 以上的版本应该都增加上了 ctrl +r 运行 winver 查看版本 2. 添加删除程序 增加 wsl 增加一个功能 3. 打开cmd 输入 bash 即可 4. 可以将 ...
- [转帖]Htop 使用详解
htop使用详解 https://www.cnblogs.com/yqsun/p/5396363.html 一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件H ...
- Angular 过滤器
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- shell expr用法
expr 计算整数变量值 使用方法如下: linux-zpycfm:/home/test/shell # s=+ -bash: +: command not found linux-zpycfm:/h ...
- Java 8 函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式. Lambda 表达式和方法引用 ...
- Java中Optional类的使用
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...
- windows下ping端口
上图的操作完成以后 进入dos控制台 输入telnet ip地址 端口号 回车 标识已ping通 ping不通是这种提示
- 学习 Spring (十) 注解之 @Bean, @ImportResource, @Value
Spring入门篇 学习笔记 @Bean @Bean 标识一个用于配置和初始化一个由 Spring IoC 容器管理的新对象的方法,类似于 XML 配置文件的 可以在 Spring 的 @Config ...
- 【python练习题】程序13
#题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153= ...