描述 Description
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
如:阵列
0234500067
1034560500
2045600671
0000000089
有4个细胞
输入格式 Input Format
第一行 :两个数字M N (1<=M<=50 1<=N<80)表示该阵列有M行N列
从第2行到第M+1行 每行有连续的N个字符
输出格式 Output Format
一行: 细胞个数
样例输入 Sample Input
4 10
0234500067
1034560500
2045600671
0000000089
样例输出 Sample Output
4
=======
简单搜索
=======
const
dx:array[1..4]of longint=(1,-1,0,0);
dy:array[1..4]of longint=(0,0,-1,1);
var
m,n:longint;
ans:longint;
map:array[0..51,0..81]of char;
//f:array[0..51,0..81]of boolean;
procedure init;
begin
assign(input,'p1127.in');
assign(output,'p1127.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output); halt;
end;
procedure dfs(x,y:longint);
var
i:longint;
//j:longint;
x_,y_:longint;
begin
for i:=1 to 4 do
begin
x_:=x+dx[i];
y_:=y+dy[i];
if map[x_,y_]<>'0' then
begin
map[x_,y_]:='0';
dfs(x_,y_);
end;
end;
end;
procedure main;
var
i,j:longint;
begin
readln(m,n);
for i:=0 to m+1 do
for j:=0 to n+1 do
map[i,j]:='0';
ans:=0;
//fillchar(f,sizeof(f),true);
for i:=1 to m do
begin
for j:=1 to n do
begin
read(map[i,j]);
end;
readln;
end;
for i:=1 to m do
for j:=1 to n do
begin
if map[i,j]<>'0' then
begin
inc(ans);
map[i,j]:='0';
dfs(i,j);
end;
end;
writeln(ans);
end;
begin
init;
main;
terminate;
end.