题目大意
在某座垃圾堆成山的城市里,有很多流浪猫。恰好,他们把你一个Oler认成了动物学家,了解这些小猫咪的活动轨迹,问你最少要多少捕兽夹才能将猫抓住。
注:这是一个n*m的矩阵,表示这座城市,猫在这座城里浪来浪去,用"W"表示往西,"E”表示往东,"N"表示往北,"S"表示往南。
解题思路
好吧,看到这道题,我就高兴了,暴力模拟啊。
其实这道题想法很简单,但实现起来却十分复杂,一不小心就会打错。
用dg来找猫下一步会往哪走,再用bz判重。如果无法走下去就找一个没有打过标记的走,inc(ans);
r
n,m,i,j,k,s:longint;
a:array[1..1000,1..1000]of char;
b:array[1..1000,1..1000]of longint;
bz:array[1..1000,1..1000]of boolean;
procedure dg(i,j,k:longint);
begin
b[i,j]:=k;
bz[i,j]:=true;
case (a[i,j]) of
'S':if (bz[i+1,j]=false) then dg(i+1,j,k) else
if (k=b[i+1,j]) then inc(s) else exit;
'N':if (bz[i-1,j]=false) then dg(i-1,j,k) else
if (k=b[i-1,j]) then inc(s) else exit;
'E':if (bz[i,j+1]=false) then dg(i,j+1,k) else
if (k=b[i,j+1]) then inc(s) else exit;
'W':if (bz[i,j-1]=false) then dg(i,j-1,k) else
if (k=b[i,j-1]) then inc(s) else exit;
end;
end;
begin
fillchar(bz,sizeof(bz),false);
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j]);
readln;
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
inc(k);
dg(i,j,k);
end;
end;
writeln(s);
end.