讨论 / 为什么会错。。。。。。。。。。。。。。。。。。。
wower 2010-10-20 05:45:00
点我顶贴 收藏 删除
Program rq443;

const dx:array[1..4]of integer=(1,-1,0,0);

dy:array[1..4]of integer=(0,0,1,-1);

Var c:char;

m,n,i,j,k,l,sum,w,h,x1,y1:longint;

b,b1:array[-3..30,-3..30]of -1..0;

procedure try(x,y:longint);

var i1:longint;

begin

for i1:=1 to 4 do

if b[x+dx[i1],y+dy[i1]]=0 then

begin

inc(sum);

b[x+dx[i1],y+dy[i1]]:=-1;

try(x+dx[i1],y+dy[i1]);

end;

end;

begin

readln(h,w);

for i:=-2 to h+2 do

for j:=-2 to w+2 do

begin

b[i,j]:=-1;

end;

for i:=1 to h do

begin

for j:=1 to w do begin

read(c);

if c='.' then b[i,j]:=0;

if c='@' then begin x1:=i;y1:=j;b[i,j]:=0;end;

end;

readln;

end;

try(x1,y1);

write(sum);

end.

#1 wower@2010-10-20 04:31:00
回复 删除
w,h 读反了
#2 L.Lawliet@2010-10-20 05:45:00
回复 删除
这是典型的洪水覆盖问题

program rumen;

const maxn=20;

var a:array[0..maxn,0..maxn]of integer;

str:string;

total:integer;

w,h,i,j,k,m,n:integer;

procedure dfs(x,y:integer);

begin

if (x>w)or(x<1)then exit;

if (y>h)or(y<1)then exit;

if a[x,y]=0 then exit;

dec(a[x,y]);

inc(total);

dfs(x,y+1);

dfs(x,y-1);

dfs(x-1,y);

dfs(x+1,y);

end;

{main}

begin

total:=0;

readln(w,h);

for i:=1 to h do

begin

readln(str);

for j:=1 to w do

begin

if str[J]='#'then a[J,I]:=0;

if str[J]='.'then a[J,I]:=1;

if str[J]='@'then a[J,I]:=-1;

end;

end;

writeln(total);

end.

查看更多回复
提交回复