s,m,n,i,j,x1,x2:longint;
procedure xx(x,y:longint);
begin
if (x>=1) and (x<=m) and (y>=1) and (y<=n) then begin
if a[x,y]=’.’ then begin
s:=s+1;
a[x,y]:=’*’;
end;
if (a[x,y]=’.’) or (a[x,y]=’@’) or (a[x,y]=’*’) then begin
xx(x-1,y);
xx(x+1,y);
xx(x,y-1);
xx(x,y+1);
end;
end;
end;
begin
readln(n,m);
for i:=1 to m do begin
for j:=1 to n do begin
read(a[i,j]);
if a[i,j]=’@’ then begin x1:=i;x2:=j;end;
end;
end;
xx(x1,x2);
write(s);
end.
var m:array[1..1001,1..1001] of char;
h,w:longint;
i,j:longint;
max,x1,y1:longint;
procedure find(x,y:longint);
begin
if m[x,y]=’#’ then exit;
m[x,y]:=’#’;
inc(max);
if (y>1) then find(x,y-1);
if (y<h) then find(x,y+1);
if (x>1) then find(x-1,y);
if (x<w) then find(x+1,y);
end;
begin
readln(h,w);max:=0;
for i:=1 to w do
begin
for j:=1 to h do
begin
read(m[i,j]);
if m[i,j]=’@’ then begin x1:=i;y1:=j;end;
end;
readln;
end;
find(x1,y1);
write(max);
end.
s,m,n,i,j,x1,x2:longint;
procedure xx(x,y:longint);
begin
if a[x,y]=’#’ then exit;
if a[x,y]=’.’ then inc(s);
a[x,y]:=’#’;
if x>1 then xx(x-1,y);
if x<m then xx(x+1,y);
if y>1 then xx(x,y-1);
if y<n then xx(x,y+1);
end;
begin
readln(n,m);
for i:=1 to m do begin
for j:=1 to n do begin
read(a[i,j]);
if a[i,j]=’@’ then begin x1:=i;x2:=j;end;
end;
end;s:=0;
xx(x1,x2);
write(s);
end.
第二,@也得算进去,s不加1不是找死么
再者,a数组搞这么大,虽然不是找死,但也太那啥了
更改后的程序(好久没贴水膘体程序了啊):
var a:array[1..20,1..20]of char;
s,m,n,i,j,x1,x2:longint;
procedure xx(x,y:longint);
begin
if a[x,y]=’#’ then exit;
if a[x,y]=’.’ then inc(s);
a[x,y]:=’#’;
if x>1 then xx(x-1,y);
if x<m then xx(x+1,y);
if y>1 then xx(x,y-1);
if y<n then xx(x,y+1);
end;
begin
readln(n,m);
for i:=1 to m do
begin
for j:=1 to n do
begin
read(a[i,j]);
if a[i,j]=’@’ then
begin
x1:=i;
x2:=j;
end;
end;
readln;
end;
s:=1;
xx(x1,x2);
write(s);
end.