Cod sursa(job #66463)

Utilizator CezarMocanCezar Mocan CezarMocan Data 18 iunie 2007 19:11:27
Problema Castel Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.82 kb
const dl:array[1..4] of integer=(1,-1,0,0);
      dc:array[1..4] of integer=(0,-0,1,-1);

label gata;
type cell=record
                l,c:integer;
                end;
var v,ch:array[0..151,0..151]of longint;
    x:array[1..150,1..150]of cell;
    n,m,p,i,j,k,q,u,d:longint;
    ok:boolean;
    c,s:array[1..230000]of longint;
    viz:array[0..151,0..151]of longint;

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;
for i:=1 to n do
        for j:=1 to m do
                begin
                read(v[i,j]);
                inc(c[v[i,j]]);
                x[v[i,j],c[v[i,j]]].l:=i;
                x[v[i,j],c[v[i,j]]].c:=j;
                end;
for i:=1 to n do
        for j:=1 to m do
                if v[i,j]=p then
                        goto gata;
gata:
viz[i,j]:=1;
for d:=1 to 4 do
        viz[i+dl[d],j+dc[d]]:=2;
q:=1;
u:=1;
s[1]:=v[i,j];
while q<=u do
        begin
        for k:=1 to u do
        for i:=1 to c[s[k]] do
                begin
                if viz[x[s[k],i].l,x[s[k],i].c]=2 then
                        begin
                        viz[x[s[k],i].l,x[s[k],i].c]:=1;
                        inc(u);
                        s[u]:=ch[x[s[k],i].l,x[s[k],i].c];
                        for d:=1 to 4 do
                                begin
                                if viz[x[s[k],i].l+dl[d],x[s[k],i].c+dc[d]]<>1 then
                                        viz[x[s[k],i].l+dl[d],x[s[k],i].c+dc[d]]:=2;
                                end;
                        end;
                end;
        inc(q);
        end;
writeln(u);
close(input);close(output);
end.