简单的BFS,不解释了。。。。。。。。。。 program P1353; const dx:array [1..4] of -1..1=(-1,0,1,0); dy:array [1..4] of -1..1=(0,1,0,-1); var w,h,x,y,tot:longint; a:array [-1..20,-1..20] of 0..2; d:array [-1..1000,-1..2] of longint; procedure init; var i,j:longint; ch:char; begin tot:=1; readln(h,w); for i:=1 to h do begin for j:=1 to w do begin read(ch); case ch of '.':a[i,j]:=1; '#':a[i,j]:=2; '@':begin a[i,j]:=1; x:=i; y:=j; end; end; end; readln; end; end; procedure bfs; var i,j,head,t,x1,y1:longint; begin head:=0; t:=1; d[1,1]:=x; d[1,2]:=y; a[x,y]:=2; while head<t do begin inc(head); for i:=1 to 4 do begin x1:=d[head,1]+dx[i]; y1:=d[head,2]+dy[i]; if (a[x1,y1]=1) and (x1>=1) and (x1<=h) and (y1>=1) and (y1<=w) then begin inc(tot); inc(t); d[t,1]:=x1; d[t,2]:=y1; a[x1,y1]:=2; end; end; end; end; begin assign(input,'P1353.in'); reset(input); assign(output,'P1353.out'); rewrite(output); init; bfs; writeln(tot-1); close(input); close(output); end.