3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 87  Solved: 49
[Submit][Status][Discuss]

Description

Input

  第1行:4个由空格隔开的整数X,K Mx,My.
    第2到第Y+1行:每行由X个字符描述草地.

Output

    一个单独的整数表示最后一个不是大石块的格子被乳草占领的星期数

Sample Input

4 3 1 1
....
..*.
.**.

Sample Output

4

HINT

 

Source

Gold

 

题解:题目本身很水,一道灌水法,BFS秒杀
但还是WA了一下,表示题目描述简直坑爹不解释,注意看清题目描述再下手(还有OI经常很良心的让你就算题目理解错了也能过样例TT)
 1 /**************************************************************
 2     Problem: 3406
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:20 ms
 7     Memory:444 kb
 8 ****************************************************************/
 9  
10 const dir:array[1..8,1..2] of longint=((1,0),(-1,0),(0,1),(0,-1),(1,1),(-1,-1),(-1,1),(1,-1));
11 var
12    i,j,k,l,m,n,x,y,x0,y0,f,r:longint;
13    a:array[0..101,0..101] of longint;
14    d:array[0..15000,1..3] of longint;
15    ch:char;
16 begin
17      readln(m,n,y,x);x:=n+1-x;
18      for i:=0 to n+1 do
19          begin
20               a[i,m+1]:=1;
21               a[i,0]:=1;
22          end;
23      for i:=0 to m+1 do
24          begin
25               a[n+1,i]:=1;
26               a[0,i]:=1;
27          end;
28      for i:=1 to n do
29          for j:=1 to m do
30              begin
31                   read(ch);
32                   if ch='.' then a[i,j]:=0 else a[i,j]:=1;
33                   if j=m then readln;
34              end;
35      d[1,1]:=x;d[1,2]:=y;d[1,3]:=0;f:=1;r:=2;
36      while f<r do
37            begin
38                 for i:=1 to 8 do
39                     begin
40                          x0:=d[f,1]+dir[i,1];
41                          y0:=d[f,2]+dir[i,2];
42                          if a[x0,y0]=0 then
43                             begin
44                                  d[r,1]:=x0;
45                                  d[r,2]:=y0;
46                                  d[r,3]:=d[f,3]+1;
47                                  inc(r);a[x0,y0]:=1;
48                             end;
49                     end;
50                 inc(f);
51            end;
52      writeln(d[f-1,3]);
53      readln;
54 end.      

 

posted @ 2015-04-11 23:12  HansBug  阅读(418)  评论(0编辑  收藏  举报