1. 程式人生 > >抓貓

抓貓

題目大意

在某座垃圾堆成山的城市裡,有很多流浪貓。恰好,他們把你一個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.