Cod sursa(job #1228239)
Utilizator | Data | 13 septembrie 2014 11:33:02 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 4.14 kb |
program suma;
type matrice=array[0..100,0..100] of integer;
el=record
l,c:integer;
end;
const dep:array[1..8] of el=((l:1;c:0),(l:0;c:1),(l:-1;c:0),(l:0;c:-1),(l:-1;c:1),(l:-1;c:-1),(l:1;c:1),(l:1;c:1));
var coj:array[1..100] of el;
cor:array[1..100] of el;
k,i,j,n,m,lj,lr,cj,cr,str,sfr,x:integer;
pred:array[1..100] of integer;
a:matrice;
f,g:text;
procedure citire;
var i,j:integer;
k:char;
begin
readln(f,n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(f,k);
if k='X' then
a[i,j]:=-1
else
if k=' ' then
a[i,j]:=0
else
if k='J' then
begin
lj:=i;
cj:=j;
end
else
if k='R' then
begin
lr:=i;
cr:=j;
end;
end;
readln(f);
end;
end;
procedure bordare;
var i:integer;
begin
for i:=0 to n+1 do
a[i,0]:=-1;
for i:=0 to m+1 do
a[0,i]:=-1;
for i:=0 to n+1 do
a[i,m+1]:=-1;
for i:=0 to m+1 do
a[n+1,i]:=-1;
end;
begin
assign(f,'rj.in');
reset(f);
assign(g,'rj.out');
rewrite(g);
citire;
bordare;
str:=0;
sfr:=1;
cor[sfr].l:=lr;
cor[sfr].c:=cr;
pred[sfr]:=str;
a[lr,cr]:=2;
{ stj:=0;
sfj:=1;
coj[sfj].l:=lj;
coj[sfj].c:=cj; }
if (lj=lr) and (cr=cj) then
str:=sfr
else
while (str<sfr) do
begin
inc(str);
for i:=1 to 8 do
begin
if a[cor[str].l+dep[i].l,cor[str].c+dep[i].c]=0 then
begin
a[cor[str].l+dep[i].l,cor[str].c+dep[i].c]:=a[cor[str].l,cor[str].c]+1;
inc(sfr);
pred[sfr]:=str;
cor[sfr].l:=cor[str].l+dep[i].l;
cor[sfr].c:=cor[str].c+dep[i].c;
if (cor[sfr].l=lj) and (cor[sfr].c=cj) and ( a[cor[str].l+dep[i].l,cor[str].c+dep[i].c] mod 2=0) then
begin
k:=a[cor[str].l+dep[i].l,cor[str].c+dep[i].c] div 2;
x:=sfr;
str:=sfr;
end;
end;
end;
while x<>0 do
begin
if a[cor[x].l,cor[x].c]=k+1 then
begin
write(g,k,' ',cor[x].l,' ',cor[x].c);
end;
x:=pred[x];
end;
end;
close(f);
close(g);
end.