Cod sursa(job #1375244)

Utilizator 100attilaSzasz Attila 100attila Data 5 martie 2015 12:46:35
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.27 kb
const irany:array[1..2,1..8] of integer=((-1,-1,0,1,1, 1, 0,-1),
                                         ( 0, 1,1,1,0,-1,-1,-1));
type tipus=record
              rom,jul:integer;
             end;
var f,g:text;
    c:char;
    b:boolean;
    min,x,y,m,n,i,j,kr,kj,l:integer;
    r:array[0..101,0..101]of tipus;

begin
assign(f,'rj.in');
assign(g,'rj.out');
reset(f);
rewrite(g);
readln(f,m,n);
for i:=1 to m do
for j:=1 to n+2 do
                begin
                 read(f,c);
                 if pos(c,'XRJ rjx')>0 then
                 case c of ' ':begin
                                r[i,j].rom:=0;
                                r[i,j].jul:=0;
                               end;
                           'X':begin
                                r[i,j].rom:=-1;
                                r[i,j].jul:=-1;
                               end;
                           'R':begin
                                r[i,j].rom:=1;
                                r[i,j].jul:=0;
                               end;
                           'J':begin
                                r[i,j].jul:=1;
                                r[i,j].rom:=0;
                               end;
                           end;

                end;

for i:=1 to n do
                begin
                 r[0,i].rom:=-1;
                 r[m+1,i].rom:=-1;
                 r[0,i].jul:=-1;
                 r[m+1,i].jul:=-1;
                end;
for i:=1 to m do
                begin
                 r[i,0].rom:=-1;
                 r[i,n+1].rom:=-1;
                 r[i,0].jul:=-1;
                 r[i,n+1].jul:=-1;
                end;


kr:=1;
kj:=1;
repeat
b:=true;
for i:=1 to m do
 for j:=1 to n do
                 begin
                  if r[i,j].rom=kr then
                   for l:=1 to 8 do
                    if (r[i+irany[1,l],j+irany[2,l]].rom=0)or
                       (r[i+irany[1,l],j+irany[2,l]].rom>kr+1)then
                                                                  begin
                                                                   r[i+irany[1,l],j+irany[2,l]].rom:=kr+1;
                                                                   b:=false;
                                                                  end;
                  if r[i,j].jul=kj then
                   for l:=1 to 8 do
                    if (r[i+irany[1,l],j+irany[2,l]].jul=0)or
                       (r[i+irany[1,l],j+irany[2,l]].jul>kj+1)then
                                                                  begin
                                                                   r[i+irany[1,l],j+irany[2,l]].jul:=kj+1;
                                                                   b:=false;
                                                                  end;
                 end;
inc(kj);
inc(kr);
until b;

min:=maxint;

for i:=1 to m do
for j:=1 to n do
if (r[i,j].rom=r[i,j].jul)and(r[i,j].rom>0)and(r[i,j].rom<min) then
                             begin
                              min:=r[i,j].rom;
                              x:=i;
                              y:=j;
                             end;

writeln(g,min,' ',x,' ',y);

close(g);
end.