Cod sursa(job #302386)

Utilizator SzabiVajda Szabolcs Szabi Data 8 aprilie 2009 21:03:41
Problema Castel Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.42 kb
program kastely;
type tipus=record
  i,j:1..150;

end;
var n,m,i,j,k,m1,m2,db:word;
a:array[1..150,1..150] of 0..22500;
b:array[1..22500] of tipus;
c:array[1..22500] of boolean;
f,g:text;
van:boolean;
x,y:array[1..4] of -1..1;
function sor(k:word):word;
begin
   if k mod m=0 then sor:=k div m else
   sor:=k div m+1;
end;
function osz(k:word):word;
begin
if k mod m=0 then osz:=m else osz:=k mod m;

end;

function szam(i,j:word):word;
begin
szam:=(i-1)*m+j;

end;

procedure tolt(m1:word);
var i:word;
begin

a[b[m1].i,b[m1].j]:=0;
for i:=1 to 4 do begin
if (b[m1].i+x[i]>=1) and (b[m1].i+x[i]<=n) and (b[m1].j+y[i]>=1) and (b[m1].j+y[i]<=m) then begin

if (c[a[b[m1].i+x[i],b[m1].j+y[i]]]) and (a[b[m1].i+x[i],b[m1].j+y[i]]<>0) then begin
  inc(m2);
  b[m2].i:=b[m1].i+x[i];
  b[m2].j:=b[m1].j+y[i];
  c[szam(b[m2].i,b[m2].j)]:=true;
  van:=true;
  inc(db);
end;

end;
end;



end;


begin
assign(f,'castel.in');reset(f);
assign(g,'castel.out');rewrite(g);

x[1]:=-1;y[1]:=0;
x[2]:=0;y[2]:=1;
x[3]:=1;y[3]:=0;
x[4]:=0;y[4]:=-1;
readln(f,n,m,k);

for i:=1 to n do begin
 for j:=1 to m do
 read(f,a[i,j]);

readln(f);
end;


c[k]:=true;

m1:=1;m2:=1;
db:=1;

b[1].i:=sor(k);
b[1].j:=osz(k); van:=true;


while van do begin
van:=false;
while m1<=m2 do begin
tolt(m1);
inc(m1);
end;

for i:=1 to m2 do
tolt(i);

end;
write(g,db);
close(f);
close(g);

end.