3385: [Usaco2004 Nov]Lake Counting 数池塘
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 22 Solved: 21
[Submit][Status][Discuss]
Description
农夫约翰的农场可以表示成N×M(1≤N,M≤100)个方格组成的矩形.由于近日的降雨,
在约翰农场上的不同地方形成了池塘.每一个方格或者有积水(’W’)或者没有积水(’.’).农夫约翰打算数出他的农场上共形成了多少池塘.一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的.
现给出约翰农场的图样,要求输出农场上的池塘数.
Input
第1行:由空格隔开的两个整数N和M.
第2到N+1行:每行M个字符代表约翰农场的一排方格的状态.每个字符或者是’W’或者
是’.’,字符之间没有空格.
Output
约翰农场上的池塘数.
Sample Input
10 12
W ........ WW.
. WWW ..... WWW
.... WW ... WW.
......... WW.
......... W..
..W ...... W..
.W.W ..... WW.
W.W.W ..... W.
.W.W ...... W.
..W ....... W.
W ........ WW.
. WWW ..... WWW
.... WW ... WW.
......... WW.
......... W..
..W ...... W..
.W.W ..... WW.
W.W.W ..... W.
.W.W ...... W.
..W ....... W.
Sample Output
3
HINT
共有3个池塘:一个在左上角,一个在左下角,还有一个沿着右边界
Source
题解:一开始居然WA了一下,结果发现子程序里面忘申请局部变量i了TT
别的实在没了,直接灌水秒之,不明白这个为啥也能成为金组。。。不过貌似NOV2004只有金组的= =
/**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ const dir:array[..,..] of longint=((,),(,-),(,),(-,),(,-),(-,),(,),(-,-));
var
i,j,k,l,m,n,ans:longint;
ch:char;
a:array[..,..] of longint;
procedure floodfill(x,y:longint);
var i:longint;
begin
if a[x,y]= then exit;
a[x,y]:=;
for i:= to do
if a[x+dir[i,],y+dir[i,]]= then floodfill(x+dir[i,],y+dir[i,]);
end;
begin
readln(n,m);
fillchar(a,sizeof(a),);
for i:= to n do
for j:= to m do
begin
read(ch);
if upcase(ch)='W' then a[i,j]:=;
if j=m then readln;
end;
ans:=;
for i:= to n do
for j:= to m do
if a[i,j]= then
begin
inc(ans);
floodfill(i,j);
end;
writeln(ans);
readln;
end.