Cod sursa(job #88742)

Utilizator savimSerban Andrei Stan savim Data 3 octombrie 2007 17:59:59
Problema Castel Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.42 kb
var c,v,p:array[0..150,0..150]of longint;
    n,i,j,k,m,x,y,t,a,b,d,e:longint;
    o:array[0..10000]of longint;
    f:text;
begin
   assign(f,'castel.in');
   reset(f);
   read(f,m,n,k);
   for i:=1 to m do
   for j:=1 to n do
   begin
   v[i,j]:=n*(i-1)+j;
   if v[i,j]=k then begin p[i,j]:=1;
                          o[v[i,j]]:=1;
                          x:=i;
                          y:=j;
                    end;
   read(f,c[i,j]);
   end;
   close(f);
   assign(f,'castel.out');
   rewrite(f);
   repeat
   a:=p[x+1,y];
   if o[c[x+1,y]]=0 then a:=200000;
   b:=p[x,y+1];
   if o[c[x,y+1]]=0 then b:=200000;
   d:=p[x-1,y];
   if o[c[x-1,y]]=0 then d:=200000;
   e:=p[x,y-1];
   if o[c[x,y-1]]=0 then e:=200000;
   if(a<=b)and(a<=e)and(a<=d)and(x+1<=m)and(o[c[x+1,y]]=1)then x:=x+1
                              else
   if(b<=a)and(b<=e)and(b<=d)and(y+1<=n)and(o[c[x,y+1]]=1)then y:=y+1
                              else
   if(d<=a)and(d<=b)and(d<=e)and(x-1>0)and(o[c[x-1,y]]=1)then x:=x-1
                              else
   if(e<=a)and(e<=b)and(e<=d)and(y-1>0)and(o[c[x,y-1]]=1)then y:=y-1;
   o[v[x,y]]:=1;
   p[x,y]:=p[x,y]+1;
   k:=0;
   for i:=1 to m do
   for j:=1 to n do
   if(o[v[i,j]]=0)and(o[c[i,j]]=1)and((p[i+1,j]>=1)or(p[i,j+1]>=1)or(p[i-1,j]>=1)or(p[i,j-1]>=1))then k:=1;
   until k=0;
   for i:=1 to n*m do
   if o[i]=1 then k:=k+1;
   writeln(f,k);
   close(f);
end.