1054: [HAOI2008]移动玩具

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1272  Solved: 690
[Submit][Status][Discuss]

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

HINT

 

Source

题解:其实是一道水水哒搜索题,只要你知道怎么状压,怎么用一个数组判重同时记录最优值就好了

(PS:其实我WA掉的那一次是没特判开头结尾情况完全一样的情形,应该输出0,而我原来的程序将没有输出= =,注意下)

 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ var
i,j,k,l,m,n,x0,x1,x,y,f,r:longint;
c,d:array[..] of longint;
list:array[..] of longint;ch:char;
function num(x,y:longint):longint;inline;
begin
exit(*(x-)+y);
end;
function getit(x,y:longint):longint;inline;
begin
if odd(x div list[y]) then exit() else exit();
end;
procedure orz(x:longint);inline;
begin
writeln(x);
readln;
halt;
end;
begin
list[]:=;for i:= to do list[i]:=list[i-]*;
x0:=;x1:=;
for i:= to do
begin
for j:= to do
begin
read(ch);
inc(x0,(ord(ch)-)*list[num(i,j)]);
end;
readln;
end;
readln;
for i:= to do
begin
for j:= to do
begin
read(ch);
inc(x1,(ord(ch)-)*list[num(i,j)]);
end;
readln;
end;
if x0=x1 then orz();
for i:= to do c[i]:=maxlongint;
d[]:=x0;f:=;r:=;c[x0]:=;
while f<r do
begin
l:=d[f];i:=;x:=;y:=;
while l> do
begin
x:=x+y div ;y:=y mod +;
if odd(l) then
begin
if x> then
begin
if getit(d[f],i-)= then
begin
d[r]:=d[f]-list[i]+list[i-];
if c[d[r]]=maxlongint then
begin
c[d[r]]:=c[d[f]]+;
if d[r]=x1 then orz(c[d[r]]);
inc(r);
end;
end
end;
if x< then
begin
if getit(d[f],i+)= then
begin
d[r]:=d[f]-list[i]+list[i+];
if c[d[r]]=maxlongint then
begin
c[d[r]]:=c[d[f]]+;
if d[r]=x1 then orz(c[d[r]]);
inc(r);
end;
end;
end;
if y> then
begin
if getit(d[f],i-)= then
begin
d[r]:=d[f]-list[i]+list[i-];
if c[d[r]]=maxlongint then
begin
c[d[r]]:=c[d[f]]+;
if d[r]=x1 then orz(c[d[r]]);
inc(r);
end;
end;
end;
if y< then
begin
if getit(d[f],i+)= then
begin
d[r]:=d[f]-list[i]+list[i+];
if c[d[r]]=maxlongint then
begin
c[d[r]]:=c[d[f]]+;
if d[r]=x1 then orz(c[d[r]]);
inc(r);
end;
end;
end;
end;
inc(i);l:=l div ;
end;
inc(f);
end;
end.

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+hash)

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

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

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

  5. BZOJ 1054: [HAOI2008]移动玩具(bfs)

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

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

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

  7. bzoj1054: [HAOI2008]移动玩具

    hash+bfs:要注意特殊情况.(似乎连sort.lower_bound都不用数据小直接判重了... #include<cstdio> #include<cstring> # ...

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

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

  9. P4289 [HAOI2008]移动玩具(bfs)

    P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...

随机推荐

  1. Spring classPath:用法

    http://blog.csdn.net/xing_sky/article/details/8228305 参考文章地址: http://hi.baidu.com/huahua035/item/ac8 ...

  2. Java泛型的类型擦除

    package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestGener ...

  3. java 调用webservice的各种方法总结,wsimport方法总结

    http://www.blogjava.net/zjhiphop/archive/2009/04/29/webservice.html wsimport生成webservice客户端: wsimpor ...

  4. es6笔记7^_^class

    ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类. 部分来自JavaScript ES6 class指南.mozilla https: ...

  5. Java偏向锁实现原理(Biased Locking)

    http://kenwublog.com/theory-of-java-biased-locking 阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lock record, mark wor ...

  6. [python]Python2编码问题

    以下内容说的都是 python 2.x 版本 简介 基本概念 Python "帮"你做的事情 推荐姿势 基本概念 我们看到的输入输出都是'字符'(characters),计算机(程 ...

  7. EF+SQLSERVER控制并发下抢红包减余额(改进)

    最近几年想必大家一听到哪里有抢红包可以抢,马上会拿起手机点去~~~~然后问题来了... 如何控制在同一时间保证数据库中扣减红包余额不会出错.之前我们的做法是直接锁程序,这样子带来的坏处就是等待时间太长 ...

  8. Vue.js的环境搭建

    vue这个新的工具,确实能够提高效率,vue入门的精髓:(前提都是在网络连接上的情况下) 1.要使用vue来开发前端框架,首先要有环境,这个环境要借助于node,所以要先安装node,借助于node里 ...

  9. pyqt的 .ui 转换为 .py 后的操作注意事项

    1. 增加 import sys 2. 将 Ui_MainWindow(object) 中的 object 修改成修改成 QtGui.QMainWindow 3. 在 Ui_MainWindow 类中 ...

  10. JavaScript中国象棋程序(1) - 界面设计

    "JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第1节. 这一系列共有9个部分: 0.JavaScript中国象 ...