题目描述 Description
小浣熊松松到他的朋友家别墅去玩,发现他朋友的家非常大,而且布局很奇怪。具体来说,朋友家的别墅可以被看做一个N*M的矩形,有墙壁的地方被标记为’#’,其他地方被标记为’.’。两个格子(a,b)和(c,d)被当做在同一个房间内,当且仅当|a-c|+|b-d|=1。现在松松想知道,有多少个房间。
输入描述 Input Description
第一行包含两个整数,N和M。
接下来N行描述别墅的情况,只包含’*’和’.’。
输出描述 Output Description
输出仅一行,为房间数。
样例输入 Sample Input
3 3
.#.
#.#
.#.
样例输出 Sample Output
5
const dx:array[1..4]of integer=(1,0,-1,0);
dy:array[1..4]of integer=(0,1,0,-1);
var n,m,x,y,i,j,s:integer; a:array[0..100,0..100]of char;
procedure search(x,y:integer); {遍历同一个房间的所有格子}
var i:integer;
begin
a[x,y]:=' '; {标记已检测过}
for i:=1 to 4 do {检测4个可能方向}
if a[x+dx[i],y+dy[i]]='.' then {加了“边框”不需要检测越界,相邻='.'表示同一房间}
search(x+dx[i],y+dy[i]);
end;
begin
readln(m,n);
for i:=1 to m do {读入房间数据}
begin
for j:=1 to n do read(a[i,j]);
readln;
end;
s:=0;
for i:=1 to m do
for j:=1 to n do {扫描界内所有位置}
if a[i,j]='.' then {找到了新的房间}
begin inc(s); search(i,j); end; {计数并遍历该房间的所有格子}
writeln(s);
end.