抓貓
阿新 • • 發佈:2018-12-31
題目大意
在某座垃圾堆成山的城市裡,有很多流浪貓。恰好,他們把你一個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.