农夫约翰的农场可以表示成N*M(1<=N<=100,1<=M<=100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水('W')或者没有积水('.')。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。
现给出约翰农场的图样,要求输出农场上的池塘数。
const
maxn=102;
dx:array[1..8] of longint=(-1,-1,0,1,1,1,0,-1);
dy:array[1..8] of longint=(0,1,1,1,0,-1,-1,-1);
var
a:array[0..maxn+1,0..maxn+1] of char;
f:array[0..maxn+1,0..maxn+1] of longint;
m,n,i,j,ans:longint;
procedure init;
var
i,j:longint;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
if a[i,j]='W'
then f[i,j]:=1;
end;
readln;
end;
end;
function check(x,y:longint):boolean;
begin
check:=true;
if (x<1) or (y<1) or (x>100) or (y>100) or (a[x,y]='.') or (f[x,y]<>1)
then exit(false);
end;
procedure dfs(x,y:longint);
var
i:longint;
begin
for i:=1 to 8 do
if check(x+dx[i],y+dy[i]) then
begin
f[x+dx[i],y+dy[i]]:=2;
dfs(x+dx[i],y+dy[i]);
end;
end;
begin
assign(input,'lkcount.in'); reset(input);
assign(output,'lkcount.out');rewrite(output);
init;
for i:=1 to n do
for j:=1 to m do
if (a[i,j]='W') and (f[i,j]=1)
then begin dfs(i,j); inc(ans); end;
writeln(ans);
close(input);close(output);
end.