Cod sursa(job #82437)

Utilizator CezarMocanCezar Mocan CezarMocan Data 6 septembrie 2007 22:03:46
Problema Rj Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.27 kb
type romeo=record
                x,y:longint;
                end;
const dl:array[1..8]of integer=(-1,-1,-1,0,0,1,1,1);
      dc:array[1..8]of integer=(-1,0,1,-1,1,-1,0,1);
var ch:char;
    n,m,i,j,r1,r2,j1,j2,p,u,d,lnou,cnou,min1,min2:integer;
    v,x:array[0..100,0..100]of integer;
    c:array[1..10000]of romeo;

begin
assign(input,'rj.in');reset(input);
assign(output,'rj.out');rewrite(output);
readln(n,m);
for i:=1 to n do
        begin
        for j:=1 to m do
                begin
                read(ch);
                case ch of
                        'X':v[i,j]:=32000;
                        'R':begin r1:=i;r2:=j;end;
                        'J':begin j1:=i;j2:=j;end;
                        end;
                end;
        readln;
        end;
x:=v;
p:=1;
u:=1;
c[1].x:=r1;
c[1].y:=r2;
v[r1,r2]:=1;
while p<=u do
        begin
        for d:=1 to 8 do
                begin
                lnou:=c[p].x+dl[d];
                cnou:=c[p].y+dc[d];
                if (lnou>0)and(cnou>0)and(lnou<=n)and(cnou<=m)and(v[lnou,cnou]=0) then
                        begin
                        v[lnou,cnou]:=v[c[p].x,c[p].y]+1;
                        inc(u);
                        c[u].x:=lnou;
                        c[u].y:=cnou;
                        end;
                end;
        inc(p);
        end;
p:=1;
u:=1;
c[1].x:=j1;
c[1].y:=j2;
x[j1,j2]:=1;
while p<=u do
        begin
        for d:=1 to 8 do
                begin
                lnou:=c[p].x+dl[d];
                cnou:=c[p].y+dc[d];
                if (lnou>0)and(cnou>0)and(lnou<=n)and(cnou<=m)and(x[lnou,cnou]=0) then
                        begin
                        x[lnou,cnou]:=x[c[p].x,c[p].y]+1;
                        inc(u);
                        c[u].x:=lnou;
                        c[u].y:=cnou;
                        end;
                end;
        inc(p);
        end;
min1:=0;min2:=0;
v[0,0]:=32000;
for i:=1 to n do
        for j:=1 to m do
                if (v[i,j]=x[i,j])and(v[i,j]<v[min1,min2])and(v[i,j]<>0) then
                        begin
                        min1:=i;
                        min2:=j;
                        end;
writeln(v[min1,min2],' ',min1,' ',min2);
close(input);close(output);
end.