Cod sursa(job #56337)

Utilizator CezarMocanCezar Mocan CezarMocan Data 29 aprilie 2007 13:42:50
Problema Castel Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.94 kb
const dl:array[1..4] of integer=(1,-1,0,0);
      dc:array[1..4] of integer=(0,-0,1,-1);
type cell=record
                l,c:integer;
                end;
var v,x,ch,vz:array[0..151,0..151]of integer;
    n,m,k,d,i,j,ls,cs,p,nrv,nr,lnou,cnou,ln,cl:integer;
    ok:boolean;
    c:array[1..23000]of integer;
    viz:array[1..23000]of cell;

begin
assign(input,'castel.in');reset(input);
assign(output,'castel.out');rewrite(output);
readln(n,m,p);
k:=1;
for i:=1 to n do
        for j:=1 to m do
                begin
                ch[i,j]:=k;
                inc(k);
                end;
ls:=(p-1) div m+1;
cs:=p mod m+m*ord(p mod m=0);
nrv:=1;
viz[1].l:=ls;
viz[1].c:=cs;
vz[ls,cs]:=1;
for i:=1 to n do
        for j:=1 to m do
                read(v[i,j]);
c[p]:=1;
ok:=true;
while ok do
        begin
        ok:=false;
        for i:=1 to nrv do
                begin
                ln:=viz[i].l;
                cl:=viz[i].c;
                for d:=1 to 4 do
                        begin
                        lnou:=ln+dl[d];
                        cnou:=cl+dc[d];
                        if (lnou>0)and(lnou<=n)and(cnou>0)and(cnou<=m)
                        and(vz[lnou,cnou]=0) then
                                begin
                                if c[v[lnou,cnou]]=1 then
                                        begin
                                        c[ch[lnou,cnou]]:=1;
                                        inc(nr);
                                        vz[lnou,cnou]:=1;
                                        ok:=true;
                                        inc(nrv);
                                        viz[nrv].l:=lnou;
                                        viz[nrv].c:=cnou;
                                        end;
                                end;
                        end;

                end;
        end;
writeln(nr+1);
close(input);close(output);
end.