Cod sursa(job #744764)
#include<cstdio>
#include<deque>
using namespace std;
typedef struct punct {int x,y;};
const int dir[]={-1,0,1};
void lee(int x,int y,int a[105][105])
{
deque<punct> dq;
punct aux;
aux.x=x; aux.y=y;
int i,j,n=1,pas=1,k,l;
dq.push_back(aux);
do
{
for(;n!=0;--n)
{
aux=dq.front();
dq.pop_front();
i=aux.x; j=aux.y;
for(k=0;k<=2;k++)
{
for(l=0;l<=2;l++)
{
if(!(dir[k]==0&&dir[l]==0))
{
if(a[i+dir[k]][j+dir[l]]==0)
{
a[i+dir[k]][j+dir[l]]=pas;
aux.x=i+dir[k];
aux.y=j+dir[l];
dq.push_back(aux);
}
}
}
}
}
pas++;
n=dq.size();
}
while(n!=0);
}
int main()
{
int R[105][105],J[105][105],i,j,rj,ri,ji,jj,n,m,min=100000,x,y;
char c;
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
scanf("%d %d ",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&c);
if(c=='R') {R[i][j]=-1; ri=i; rj=j;}
else if(c=='J') {J[i][j]=-1; ji=i; jj=j;}
else if(c=='X') {R[i][j]=-1; J[i][j]=-1;}
else {R[i][j]=0; J[i][j]=0;}
R[0][j]=-1; J[0][j]=-1;
R[n+1][j]=-1; J[n+1][j]=-1;
}
scanf("%c",&c);
R[i][0]=-1; J[i][0]=-1;
R[i][m+1]=-1; J[i][m+1]=-1;
}
R[0][0]=-1; R[n+1][0]=-1; R[0][m+1]=-1; R[n+1][m+1]=-1;
J[0][0]=-1; J[n+1][0]=-1; J[0][m+1]=-1; J[n+1][m+1]=-1;
lee(ri,rj,R);
lee(ji,jj,J);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(R[i][j]==J[i][j]&&R[i][j]>0)
{
if(min>R[i][j]) {min=R[i][j]; x=i; y=j;}
}
}
}
printf("%d %d %d\n",min+1,x,y);
return 0;
}