Description

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

Input

前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。

Output

一个整数,所需要的最少移动次数。

Sample Input

1111
0000
1110
0010

1010
0101
1010
0101

Sample Output

4
 
这个题貌似在哪见过,然后找不到了
其实也不需要见过,双向BFS就够了,就是我的搜索代码太丑
 #include<cstdio>
#include<cstring>
using namespace std;
int map[][],mb[][],b[][],bs[][],q[][],h[],t[],ans;
bool pd[][],flag;
int hash(int b[][]){
int mid=;
for (int i=;i<;i++)
for (int j=;j<;j++){
mid=mid<<;
mid=mid|b[i][j];
}
return mid;
} void make(int v,int b[][],int f){
int mid=hash(b);
if (!pd[v][mid]) {
pd[v][mid]++;
bs[v][mid]=f+;
q[v][++t[v]]=mid;
}
if(pd[v^][mid]) {
flag=;ans=bs[v][mid]+bs[v^][mid];//这个地方不需要-1
return;
}
} void bfs(int v){
memset(b,,sizeof(b));
int now=q[v][++h[v]],w=bs[v][now];
int x=,y=;
for (int i=;i<=;i++){
b[x][y]=now&;
now=now>>;
y--; if(y==-)y=,x--;
}
for (int i=;i<=;i++)
for (int j=;j<;j++){
if (i!=&&b[i-][j]!=b[i][j]) {
b[i][j]^=;b[i-][j]^=;
make(v,b,w);
if (flag) return;
b[i][j]^=;b[i-][j]^=;
}
if (i!=&&b[i+][j]!=b[i][j]){
b[i][j]^=;b[i+][j]^=;
make(v,b,w);
if (flag) return;
b[i][j]^=;b[i+][j]^=;
}
if (j!=&&b[i][j]!=b[i][j-]){
b[i][j]^=;b[i][j-]^=;
make(v,b,w);
if (flag) return;
b[i][j]^=;b[i][j-]^=;
}
if (j!=&&b[i][j]!=b[i][j+]){
b[i][j]^=;b[i][j+]^=;
make(v,b,w);
if (flag) return;
b[i][j]^=;b[i][j+]^=;
}
}
} int main(){
char s[];
for (int i=;i<;i++){
scanf("%s",s);
for (int j=;j<;j++)
map[i][j]=s[j]-'';
}
for (int i=;i<;i++){
scanf("%s",s);
for (int j=;j<;j++)
mb[i][j]=s[j]-'';
}
h[]=h[]=;
make(,map,-);make(,mb,-);
while(h[]<t[]||h[]<t[]){
if (h[]==t[]) bfs();
if (flag) break;
if (h[]==t[]) bfs();
if (flag) break;
if (t[]-h[]<t[]-h[]) bfs();else bfs();
if (flag) break;
}
printf("%d",ans);
}

【BZOJ 1054】 [HAOI2008]移动玩具的更多相关文章

  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. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  4. 1054: [HAOI2008]移动玩具

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

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

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

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

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

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

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

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

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

  9. BZOJ 1054 题解

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

  10. BZOJ 1054 广搜

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

随机推荐

  1. java的回忆录

    封装的三步骤:(1)加属性(成员变量.全局变量.域field)用private来修饰(2)为对应的属性生成共有的setter.getter方法(3)在对应的setter的方法中可以根据需要加入对应的验 ...

  2. Java Concurrency - Concurrent Collections

    Data structures are a basic element in programming. Almost every program uses one or more types of d ...

  3. MongoDB - Introduction to MongoDB, Documents

    MongoDB stores data records as BSON documents. BSON is a binary representation of JSON documents, th ...

  4. Java集合类 java.util包

    概述   软件包  类  使用  树  已过时  索引  帮助  JavaTM Platform Standard Ed. 6  上一个软件包   下一个软件包 框架    无框架           ...

  5. sql新手全套

    --[数据库]gocreate database DB_MGG  --添加数据库on(name=DB_MGG --逻辑名称,filename='C:\MDB\DB_MGG.mdf' --物理名称  逻 ...

  6. JavaScript之图片滚动

    向上滚动: <!doctype html> <title>javascript无缝滚动</title> <meta charset="utf-8&q ...

  7. C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

    目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...

  8. iOS预处理指令

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...

  9. JavaScript学习笔记(10)——JavaScript语法之操作DOM

    1.页面输出用document.write()方法,但是不可以在window.onload中用,否则整个html页面将被覆盖. 2.通过javascript获取对象后,改变对象中的html内容:doc ...

  10. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...