Cod sursa(job #54446)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 24 aprilie 2007 20:55:42
Problema Castel Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.61 kb
program castel;

type sir=array[1..150,1..150]of integer;
     sir1=array[1..22500,1..2]of integer;
     sir2=array[1..22500]of boolean;
     sir3=array[1..150,1..150]of boolean;

var a,w:sir;
    m,n,k,t:integer;
    e:sir1;
    cheie:sir2;
    vizitat:sir3;

procedure citire;
var i,j,q:integer;
begin
assign(input,'castel.in');
reset(input);
readln(m,n,k);
q:=0;
for i:=1 to m do
    for j:=1 to n do
        begin
        read(a[i,j]);
        inc(q);
        w[i,j]:=q;
        if q=k then
           begin
           e[1,1]:=i;
           e[1,2]:=j;
           end;
        end;
close(input);
end;

procedure prelucrare;
var i,q,r,b,c:integer;
    gasit:boolean;
begin
cheie[a[e[1,1],e[1,2]]]:=true;
vizitat[e[1,1],e[1,2]]:=true;
gasit:=true;
r:=1;
t:=1;
repeat
q:=r;
gasit:=true;
for i:=1 to q do
    begin
    if (e[i,1]>1) and //(w[e[i-1,1],e[i,2]]<>0) and
       (cheie[a[e[i,1]-1,e[i,2]]]) then
       begin
       if vizitat[e[i,1]-1,e[i,2]]=false then
          begin
          inc(t);
          vizitat[e[i,1]-1,e[i,2]]:=true;
          gasit:=false;
          inc(r);
          e[r,1]:=e[i,1]-1;
          e[r,2]:=e[i,2];
          end;
       cheie[w[e[i,1]-1,e[i,2]]]:=true;
       end;
    if (e[i,2]>1) and //(w[e[i,1],e[i-1,2]]<>0) and
       (cheie[a[e[i,1],e[i,2]-1]]) then
       begin
       if (vizitat[e[i,1],e[i,2]-1]=false) then
          begin
          inc(t);
          vizitat[e[i,1],e[i,2]-1]:=true;
          gasit:=false;
          inc(r);
          e[r,1]:=e[i,1];
          e[r,2]:=e[i,2]-1;
          end;
       cheie[w[e[i,1],e[i,2]-1]]:=true;
       end;
    if (e[i,1]<m) and //(w[e[i+1,1],e[i,2]]<>0) and
       (cheie[a[e[i,1]+1,e[i,2]]]) then
       begin
       if (vizitat[e[i,1]+1,e[i,2]]=false) then
          begin
          inc(t);
          vizitat[e[i,1]+1,e[i,2]]:=true;
          gasit:=false;
          inc(r);
          e[r,1]:=e[i,1]+1;
          e[r,2]:=e[i,2];
          end;
       cheie[w[e[i,1]+1,e[i,2]]]:=true;
       end;
    if (e[i,2]<n) and //(w[e[i,1],e[i+1,2]]<>0) and
       (cheie[a[e[i,1],e[i,2]+1]]) then
       begin
       if (vizitat[e[i,1],e[i,2]+1]=false) then
          begin
          inc(t);
          gasit:=false;
          vizitat[e[i,1],e[i,2]+1]:=true;
          inc(r);
          e[r,1]:=e[i,1];
          e[r,2]:=e[i,2]+1;
          end;
       cheie[w[e[i,1],e[i,2]+1]]:=true;
       end;
    end;
until gasit=true;
end;

procedure scriere;
begin
assign(output,'castel.out');
rewrite(output);
write(t);
close(output);
end;

begin
citire;
prelucrare;
scriere;
end.