抓猫

题目大意

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

posted @ 2018-01-27 07:50  Sport_River  阅读(201)  评论(0编辑  收藏  举报