1054. [HAOI2008]移动玩具【BFS】
Description
Input
Output
一个整数,所需要的最少移动次数。
Sample Input
0000
1110
0010
1010
0101
1010
0101
Sample Output
4
搜索,求最优的就用BFS,记得判重复状态就好
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a[][],b[][];
struct node{
char a[][];
}A,B,T,q[];
int Ans[],dx[]={,,-,,},dy[]={,,,,-};
bool f[];
int judge(node A)
{
int ans=,base=;;
for (int i=;i<=;++i)
for (int j=;j<=;++j)
ans+=base*(A.a[i][j]-),base*=;
return ans; }
int main()
{
char ch[];
memset(A.a,-,sizeof(a));
memset(B.a,-,sizeof(b));
for (int i=;i<=;++i)
{
scanf("%s",ch);
for (int j=;j<=;++j)
A.a[i][j]=ch[j-];
}
for (int i=;i<=;++i)
{
scanf("%s",ch);
for (int j=;j<=;++j)
B.a[i][j]=ch[j-];
}
int head=;
int tail=;
q[]=A;
f[judge(A)]=true;
if (judge(A)==judge(B))
{
printf("");
return ;
}
do
{
++head;
node T=q[head];
for (int i=;i<=;++i)
for (int j=;j<=;++j)
if (T.a[i][j]=='')
for (int k=;k<=;++k)
if (T.a[i+dx[k]][j+dy[k]]=='')
{
swap(T.a[i][j],T.a[i+dx[k]][j+dy[k]]);
int x=judge(T);
if (!f[x])
{
++tail;
q[tail]=T;
f[x]=true;
Ans[tail]=Ans[head]+;
if (x==judge(B))
{
printf("%d",Ans[tail]);
return ;
}
}
swap(T.a[i][j],T.a[i+dx[k]][j+dy[k]]);
}
}while (head<tail);
}
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判重即可. # ...
- BZOJ 1054: [HAOI2008]移动玩具(bfs)
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...
- 1054: [HAOI2008]移动玩具 - BZOJ
Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...
- bzoj1054: [HAOI2008]移动玩具
hash+bfs:要注意特殊情况.(似乎连sort.lower_bound都不用数据小直接判重了... #include<cstdio> #include<cstring> # ...
随机推荐
- [javaSE] 集合框架(共性方法)
Collection接口的常用方法 add(),添加一个元素 addAll(),添加一组元素 clear(),清空 remove(),移除一个 removeAll(),移除一组 size(),元素个数 ...
- Hive配置文件hive-site.xml
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <val ...
- Java基础教程(14)--嵌套类
Java允许在一个类中定义另外一个类,这样的类被称为嵌套类,就像下面这样: class OuterClass { ... class NestedClass { ... } } 嵌套类分为两种 ...
- SpringBoot+Mybatis+Generator 逆向工程使用(二)
Mybatis-Genarator 逆向工程使用 个人开发环境 java环境:Jdk1.8.0_60 编译器:IntelliJ IDEA 2017.1.4 mysql驱动:mysql-connecto ...
- 如何优雅的爬取 gzip 格式的页面并保存在本地(java实现)
1. 引言 在爬取汽车销量数据时需要爬取 html 保存在本地后再做分析,由于一些页面的 gzip 编码格式, 获取后要先解压缩,否则看到的是一片乱码.在网络上仔细搜索了下,终于在这里找到了一个优雅的 ...
- HDU 2669 Romantic 扩展欧几里德---->解不定方程
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Windows下Sqlplus中显示乱码
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如果想显示英文 Set nls_lang=american_america.zhs16gbk 注意,前提是 ...
- android studio *.apk does not exist on disk
Build -> Clean Project Restart Android Studio
- ArcGIS Server集群布署
ArcGIS Server集群布署 准备如下的4台机器: 计算机名 IP 布署软件 说明 VMWIN2008ENSS1 192.168.1.111 ArcGIS for Server VMWIN2 ...
- 【Android】RxJava的使用(一)基本用法
前言 最近经常看到RxJava这个字眼,也看到很多人在博客中推荐使用RxJava.好奇的我怎么能错过,于是Google了一下,说RxJava好用的和说RxJava难用的都有,于是自己也亲自尝试了一下( ...