Cod sursa(job #294893)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 2 aprilie 2009 20:29:59
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.84 kb
program alex;
const b:array[1..8]of -1..1=(-1,-1,0,1,1,1,0,-1);
      d:array[1..8]of -1..1=(0,1,1,1,0,-1,-1,-1);
var ro,ju:array[1..51,1..51]of longint;
    f:text;
    q:string;
    e:boolean;
    m,n,i,j,min,l,c,x,y,k,h:longint;
begin
assign(f,'rj.in');reset(f);
readln(f,m,n);
for i:=1 to m do
    begin
    readln(f,q);
    j:=0;
    for j:=1 to length(q) do
        case q[j] of
        ' ':begin
           ro[i,j]:=-1;
           ju[i,j]:=-1;
           end;
        'X':begin
           ro[i,j]:=-2;
           ju[i,j]:=-2;
           end;
        'R':begin
            x:=i;
            y:=j;
            ju[i,j]:=-2;
            end;
        'J':begin
            l:=i;
            c:=j;
            ro[i,j]:=-2;
            end;
        end;
        if length(q)<n then for j:=length(q)+1 to n do
                                begin
                                ro[i,j]:=-1;
                                ju[i,j]:=-1;
                                end;

        end;
close(f);
ro[x,y]:=1;
ju[l,c]:=1;
k:=1;
repeat
e:=false;
for i:=1 to m do
    for j:=1 to n do
        begin
        if ro[i,j]=k then begin
                         for h:=1 to 8 do
                             if ro[i+b[h],j+d[h]]=-1 then begin
                                                         ro[i+b[h],j+d[h]]:=k+1;
                                                         e:=true;
                                                         end
                          end;
      if ju[i,j]=k then begin
                        for h:=1 to 8 do
                            if ju[i+b[h],j+d[h]]=-1 then begin
                                                         ju[i+b[h],j+d[h]]:=k+1;
                                                         e:=true;
                                                         end
                        end;
       end;
k:=k+1;
until(e=false);
l:=500000;
c:=500000;
min:=999999999;
for i:=1 to m do
    for j:=1 to n do
        if(ro[i,j]=ju[i,j])and(ro[i,j]<>-2)and(ro[i,j]<>-1)then if ro[i,j]<min then begin
                                                    min:=ro[i,j];
                                                    l:=i;
                                                    c:=j;
                                                    end
                                              else if ro[i,j]=min then if i<l then begin
                                                                                   l:=i;
                                                                                   c:=j;
                                                                                   end
                                                                               else if i=l then if j<c then c:=j;
assign(f,'rj.out');rewrite(f);
writeln(f,min,' ',l,' ',c);
close(f);
end.