题面:

  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)的更多相关文章

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

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

  2. BZOJ 1054 [HAOI2008]移动玩具

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

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

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

  4. 1054: [HAOI2008]移动玩具

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

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

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

  6. 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1054 一开始我还以为要双向广搜....但是很水的数据,不需要了. 直接bfs+hash判重即可. # ...

  7. 1054: [HAOI2008]移动玩具 - BZOJ

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

  8. 1054. [HAOI2008]移动玩具【BFS】

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

  9. [HAOI 2005][BZOJ 1054] 移动玩具

    先贴一波题面 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2288  Solved: 1270 Descr ...

随机推荐

  1. js 判断字符串中是否包含某个字符串的方法实例

    String对象的方法 方法一: indexOf()   (推荐) var str = "123"; console.log(str.indexOf("3") ...

  2. vue页面传参和接参

    https://blog.csdn.net/zhouzuoluo/article/details/81259298(copy) js** this.$router.push({ name: 'Flow ...

  3. python爬虫之scrapy文件下载

    我们在写普通脚本的时候,从一个网站拿到一个文件的下载url,然后下载,直接将数据写入文件或者保存下来,但是这个需要我们自己一点一点的写出来,而且反复利用率并不高,为了不重复造轮子,scrapy提供很流 ...

  4. freemarker 简单操作

    操作字符串函数 1. substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于end end: 截取子串的长度,end必须大于 ...

  5. 收藏一个带动画效果的ScrollViewer以及ScrollBar的模板

    这里介绍一个带动画效果的ScrollViewer和ScrollBar,总共分为两个资源字典,直接拿来引用即可: 1 ScrollBarStyle.xaml <ResourceDictionary ...

  6. shell中的>,2>&1,&>file 解析记录

    0  表示标准输入1  表示标准输出2  表示标准错误输出>  默认为标准输出重定向,与 1> 相同2>&1  意思是把 标准错误输出 重定向到 标准输出.&> ...

  7. Navicat Preminum

    此软件在连接的时候,需要这样: 新建链接==>连接属性==>编码选择自动==>如果此时点击确定的话,会把整个服务器的所有数据库都打开, 我们也可以只打开指定的数据库, 点击高级==& ...

  8. 阿里云ECS服务器,CentOS 7.4配置jdk+tomcat+mysql

    参考博客: https://mp.weixin.qq.com/s?__biz=MzIxMzk3Mjg5MQ==&mid=2247484020&idx=1&sn=6e0aa07f ...

  9. SQL Server中的完全连接(full join)

    一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename ), sal int, ...

  10. vue-cli(vue脚手架)

    vue-cli用于自动生成vue+webpack项目. 安装webpack:npm install webpack -g 检查webpack是否安装成功和版本:webpack -v 如果是webpac ...