Cod sursa(job #60912)

Utilizator petrePajarcu Alexandru-Petrisor petre Data 17 mai 2007 17:54:04
Problema Castel Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.75 kb
var b:array[1..150*150,0..100*100] of byte;
cd,a,viz,cheie:array[0..150*150] of longint;
n,i,j,k,l,m,o,p,q:longint;
 f,g:text;
begin
assign(f,'castel.in');
assign(g,'castel.out');
reset(f);
rewrite(g);
readln(f,m,n,k);
for i:=1 to m do
for j:=1 to n do
begin
read(f,a[(i-1)*n+j]);
q:=(i-1)*n+j;
p:=a[q];
inc(b[p,0]);
b[p,b[p,0]]:=q;
end;
o:=1;
cd[o]:=k;
viz[k]:=2;
cheie[k]:=1;
i:=0;
k:=1;
while i<k do
begin
inc(i);
cheie[cd[i]]:=1;
o:=0;
for j:=1 to b[cd[i],0] do
if viz[b[cd[i],j]]=1 then
        begin
        inc(k);
        cd[k]:=b[cd[i],j];
        viz[cd[k]]:=2;
        end
        else
        begin
        inc(o);
        b[cd[i],o]:=b[cd[i],j];
        end;
b[cd[i],0]:=o;
if (cheie[a[cd[i]-n]]=1)and(viz[cd[i]-n]<>2)
then
begin
inc(k);
cd[k]:=cd[i]-n;
viz[cd[k]]:=2;
end
else if viz[cd[i]-n]=0 then viz[cd[i]-n]:=1;
if (cheie[a[cd[i]+n]]=1)and(viz[cd[i]+n]<>2)
then
begin
inc(k);
cd[k]:=cd[i]+n;
viz[cd[k]]:=2;
end
else if viz[cd[i]+n]=0 then viz[cd[i]+n]:=1;
if (cd[i] mod n<>0)and(cd[i] mod n<>1) then
begin
if (cheie[a[cd[i]-1]]=1)and(viz[cd[i]-1]<>2)
then
begin
inc(k);
cd[k]:=cd[i]-1;
viz[cd[k]]:=2;
end
else if viz[cd[i]-1]=0 then viz[cd[i]-1]:=1;
if (cheie[a[cd[i]+1]]=1)and(viz[cd[i]+1]<>2)
then
begin
inc(k);
cd[k]:=cd[i]+1;
viz[cd[k]]:=2;
end
else if viz[cd[i]+1]=0 then viz[cd[i]+1]:=1;
end
else if cd[i] mod n=0 then
if (cheie[a[cd[i]-1]]=1)and(viz[cd[i]-1]<>2)
then
begin
inc(k);
cd[k]:=cd[i]-1;
viz[cd[k]]:=2;
end
else if viz[cd[i]-1]=0 then viz[cd[i]-1]:=1
else else if (cheie[a[cd[i]+1]]=1)and(viz[cd[i]+1]<>2)
then
begin
inc(k);
cd[k]:=cd[i]+1;
viz[cd[k]]:=2;
end
else if viz[cd[i]+1]=0 then viz[cd[i]+1]:=1;
end;
writeln(g,k);

close(f);
close(g);
end.