1054: [HAOI2008]移动玩具 - BZOJ

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

 

直接搜就行了

囧,本来以为迭代深搜可以行的,但是悲剧的TLE了

好吧我还是写广搜吧

1054: [HAOI2008]移动玩具 - BZOJ
 1 const
 2     fx:array[1..4]of longint=(-4,4,1,-1);
 3 var
 4     f,q:array[0..1 shl 16]of longint;
 5     start,goal,head,tail:longint;
 6  
 7 procedure bfs;
 8 var
 9     i,j,s:longint;
10 begin
11     head:=1;
12     tail:=1;
13     q[1]:=start;
14     while f[goal]>1<<20 do
15       begin
16         for i:=1 to 16 do
17           for j:=1 to 4 do
18             if (i+fx[j]>0) and (i+fx[j]<17) and ((i and 3<>0) or (fx[j]<>1)) and ((i and 3<>1) or (fx[j]<>-1)) then
19             if (q[head] and (1<<(i-1))>0) and (q[head] and (1<<(i+fx[j]-1))=0) then
20             begin
21               s:=q[head]-(1<<(i-1))+(1<<(i+fx[j]-1));
22               if f[s]>1<<20 then
23               begin
24                 f[s]:=f[q[head]]+1;
25                 inc(tail);
26                 q[tail]:=s;
27               end;
28             end;
29         inc(head);
30       end;
31 end;
32  
33 procedure main;
34 var
35     i,j:longint;
36     s:char;
37 begin
38     for i:=1 to 4 do
39       for j:=1 to 4 do
40         begin
41           repeat
42             read(s);
43           until (s=1) or (s=0);
44           start:=(start<<1)+ord(s)-ord(0);
45         end;
46     for i:=1 to 4 do
47       for j:=1 to 4 do
48         begin
49           repeat
50             read(s);
51           until (s=1) or (s=0);
52           goal:=(goal<<1)+ord(s)-ord(0);
53         end;
54     fillchar(f,sizeof(f),1);
55     f[start]:=0;
56     bfs;
57     write(f[goal]);
58 end;
59  
60 begin
61     main;
62 end.
View Code

 

1054: [HAOI2008]移动玩具 - BZOJ,布布扣,bubuko.com

1054: [HAOI2008]移动玩具 - BZOJ

上一篇:android Toast大全(五种情形)建立属于你自己的Toast


下一篇:移动端touch事件获取事件坐标