算法:搜索
分析:裸的搜索,怎么搜都不会超时。
program SH1329;
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(w,h);
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,'NDK1329.in'); reset(input);
assign(output,'NDK1329.out'); rewrite(output);
init;
bfs;
writeln(tot);
close(input); close(output);
end.
1430

被折叠的 条评论
为什么被折叠?



