Cod sursa(job #727915)
#include <fstream>
using namespace std;
#define dim 102
int r[dim][dim], ju[dim][dim], coada[dim*dim][2], inc, sf, ad[5*dim][2], bun, nrad,n,m,sx,sy,px,py;
int dx[]={-1, 1, 0, 0,1,1,-1,-1};
int dy[]={0, 0, -1, 1,1,-1,1,-1};
ifstream fin("rj.in");
ofstream fout("rj.out");
void Citire()
{
char c;
int i, j;
fin>>n >>m;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
r[i][j]=-1;
ju[i][j]=-1;
}
for(i=1;i<=n;++i)
{
c=fin.get();
for(j=1;j<=m;++j)
{
c=fin.get();
if(c=='X')
{
r[i][j]=-2;
ju[i][j]=-2;
}
if(c=='R')
{
r[i][j]=0;
sx=i;
sy=j;
}
if(c=='J')
{
ju[i][j]=0;
px=i;
py=j;
}
}
}
}
void Lee(int a[dim][dim])
{
inc=1;
while(inc<=sf)
{
int x0=coada[inc][0];
int y0=coada[inc][1];
int pas=a[x0][y0];
for(int k=0;k<8;++k)
{
int x=x0+ dx[k];
int y=y0+dy[k];
if(a[x][y]==-1)
{
a[x][y]=pas+1;
++sf;
coada[sf][0]=x;
coada[sf][1]=y;
}
}
++inc;
}
}
void scrie(int a[dim][dim], int N, int M)
{
for(int i=1;i<=N;++i)
{
for(int j=1;j<=M;++j)
fout<<a[i][j]<<" ";
fout<<'\n';
}
fout << '\n';
}
int main()
{
Citire();
sf = 1;
coada[sf][0] = sx;
coada[sf][1] = sy;
Lee(r);
sf = 1;
coada[sf][0] = px;
coada[sf][1] = py;
Lee(ju);
int min = dim*dim, x, y;
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= m; ++ j)
if ( r[i][j] > 0 && r[i][j] == ju[i][j] && r[i][j] < min )
min = r[i][j], x = i, y = j;
fout << min+1 << " " << x << " " << y;
return 0;
}