(统计数字群个数) 某矩阵由数字0到9组成,其中0表示隔板(无法通过),数字1到9表示可以通过。一个数字群为:从某个数字非0数字出发,沿着可通行数字所能到达的所有数字(行走方向可以是上下左右),这些相互能到达的数字即组成同一数字群。给出矩阵,统计该矩阵包含的数字群的个数。
输入数据第一行表示矩阵的行数m和列数n,接下来m行,每行有连续的n个字符,每个字符均为数字0到9。输出数据只有一个,即该矩阵中包含的数字群个数。
例如输入数据如下:
3 8
01234000
10030008
79000600
则输出数据如下:
4
请完善下面程序。
const maxm=50; maxn=80;
var
m,n,i,j,k,tot:integer;
a:array[1..maxm,1..maxn] of 0..1;
b:array[1..4000,1..2] of integer;
st:string;
procedure bfs(p,q:integer);
var x,y,f,t:integer;
begin
f:=1;t:=1;
b[t,1]:=p;b[t,2]:=q;
a[p,q]:=0;
inc(t);
repeat
for k:=1 to 4 do begin
if k=1 then begin x:=p+1;y:=q; end;
if k=2 then begin x:=p;y:=q+1; end;
if k=3 then begin x:=p-1;y:=q; end;
if k=4 then begin x:=p;y:=q-1; end;
if (x>0) and (x<=m) and (y>0) and (y<=n) and (a[x,y]=1) then begin
b[t,1]:=x;
b[t,2]:=y;
a[x,y]:=0;
inc(t);
end;
end;
inc(f) ;
p:=b[f,1];q:=b[f,2];
f>t ;
end;
begin
readln(m,n);
fillchar(a,sizeof(a),0);
for i:=1 to m do begin
readln(st);
for j:=1 to n do
if st[j]<>'0' then a[i,j]:=1
end;
tot:=0;
for i:=1 to m do
for j:=1 to n do
if a[i,j]=1 then begin
bfs(i,j);
inc(tot) ;
end;
writeln(tot);
end.