Cod sursa(job #686983)

Utilizator georgezidanicSomlea George Adrian georgezidanic Data 21 februarie 2012 23:39:28
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.74 kb
const nmax=100;
type mr=array[1..nmax,1..nmax]of integer;
const dx:array[1..8] of -1..1=(0,1,1,1,0,-1,-1,-1);
      dy:array[1..8] of -1..1=(1 ,1, 0 ,-1 ,-1 ,-1 ,0 ,1);
var n,m,i,j,xr,yr,xj,yj:integer;
    a:array[1..nmax,1..nmax] of char;
    f,g:text;
    aj:mr;
    ar:mr;
procedure parcurge(x0,y0:integer;var d:mr);
        var x,y,pi,ps,i,j:integer;
            cl:array[1..nmax]of integer;
            cc:array[1..nmax]of integer;
        begin
        for i:=1 to n do
                for j:=1 to m do d[i,j]:=-1;
        pi:=1;
        ps:=1;
        d[x0,y0]:=1;
        cl[pi]:=x0;
        cc[pi]:=y0;
        while pi<=ps do
                begin
                x:=cl[pi];
                y:=cc[pi];
                for i:=1 to 8 do
                        if ((x+dx[i])<=n)and((x+dx[i])>=1) and ((y+dy[i])<=m)and ((y+dy[i])>=1)
                                and (a[x+dx[i],y+dy[i]]=' ') and (d[x+dx[i],y+dy[i]]=-1) then
                                        begin
                                        ps:=ps+1;
                                        cl[ps]:=x+dx[i];
                                        cc[ps]:=y+dy[i];
                                        d[x+dx[i],y+dy[i]]:=d[x,y]+1;
                                        end;
                pi:=pi+1;
                end;

        end;
procedure afisare;
        var xmin,ymin,tmin:integer;
        begin
        tmin:=nmax*nmax+1;xmin:=-1;ymin:=-1;
        for i:=1 to n do
                for j:=1 to m do if (ar[i,j]=aj[i,j]) and (ar[i,j]<>-1) then
                         if ar[i,j]<tmin then
                                begin
                                tmin:=ar[i,j];
                                xmin:=i;
                                ymin:=j;
                                end;
        writeln(g,tmin,' ',xmin,' ',ymin);
        close(g);
        end;
begin
        assign(f,'rj.in');reset(f);
        assign(g,'rj.out');rewrite(g);
        readln(f,n,m);
        for i:=1 to n do
                BEGIN
                for j:=1 to m do read(f,a[i,j]);
                READLN(F);
                END;
        for i:=1 to n do
                for j:=1 to m do
                        if a[i,j]='R' then
                                begin
                                xr:=i;
                                yr:=j;
                                a[i,j]:=' ';
                                end
                        else if a[i,j]='J' then
                                begin
                                xj:=i;
                                yj:=j;
                                a[i,j]:=' ';
                                end;
        parcurge(xr,yr,ar);
        parcurge(xj,yj,aj);
        afisare;
end.