Cod sursa(job #1376555)

Utilizator Radu1998Cotisel Radu Bogdan Radu1998 Data 5 martie 2015 17:49:24
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.56 kb
PROGRAM ROMEO_JULIETA;
CONST DX:ARRAY[1..8] OF INTEGER=(0,1,0,-1,1,-1,1,-1);
      DY:ARRAY[1..8] OF INTEGER=(1,0,-1,0,1,-1,-1,1);
TYPE MATRICE=ARRAY[0..200,0..200] OF INTEGER;
COORDS=RECORD
X,Y:INTEGER;
END;

VAR  A,V:MATRICE; F:TEXT; N,M,XR,XJ,YR,YJ,MIN,I,J:INTEGER;

PROCEDURE BORDARE(VAR A:MATRICE);
VAR I:INTEGER;
BEGIN
FOR I:=1 TO N DO
BEGIN
A[I,0]:=-1;
A[I,M+1]:=-1;
END;

FOR I:=1 TO M DO
BEGIN
A[0,I]:=-1;
A[N+1,I]:=-1;
END;
END;

PROCEDURE CITIRE;
VAR I,J:INTEGER; X:CHAR;
BEGIN
ASSIGN(F,'RJ.IN');RESET(F);
READLN(F,N,M);
FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO M DO
BEGIN
READ(F,X);

IF X='X' THEN
BEGIN
A[I,J]:=-1;
V[I,J]:=-1;
END
ELSE
IF X='R' THEN
BEGIN
A[I,J]:=-2;
V[I,J]:=0;
XR:=I;
YR:=J;
END
ELSE
IF X='J' THEN
BEGIN
A[I,J]:=0;
V[I,J]:=-2;
XJ:=I;
YJ:=J;
END
ELSE
BEGIN
A[I,J]:=0;
V[I,J]:=0;
END;

END;
READLN(F);
END;
BORDARE(A);
BORDARE(V);
CLOSE(F);
END;

PROCEDURE FILL(X,Y:INTEGER; VAR A:MATRICE);
VAR I,J,S,XV,YV:INTEGER; Q:ARRAY[0..200] OF COORDS;
BEGIN
Q[1].X:=X;
Q[1].Y:=Y;
I:=1;
S:=1;
A[X,Y]:=1;
WHILE I<=S DO
BEGIN
X:=Q[I].X;
Y:=Q[I].Y;

FOR J:=1 TO 8 DO
BEGIN
XV:=X+DX[J];
YV:=Y+DY[J];
IF A[XV,YV]=0 THEN
BEGIN
A[XV,YV]:=A[X,Y]+1;
S:=S+1;
Q[S].X:=XV;
Q[S].Y:=YV;
END;
END;
I:=I+1;
END;
END;


BEGIN
CITIRE;
FILL(XR,YR,A);
FILL(XJ,YJ,V);

MIN:=MAXINT;
FOR I:=1 TO N DO
FOR J:=1 TO M DO
IF (A[I,J]>=0) AND (A[I,J]=V[I,J]) THEN
IF A[I,J]<MIN THEN
BEGIN
MIN:=A[I,J];
XR:=I;
YR:=J;
END;

ASSIGN(F,'RJ.OUT');REWRITE(F);
WRITE(F,MIN,' ',XR,' ',YR);
CLOSE(F);

END.