Cod sursa(job #557523)
#include<iostream.h>
#include<fstream.h>
fstream f("rj.in",ios::in);
fstream g("rj.out",ios::out);
int main()
{
char a[101][101];
int dr[101][101]={0},dj[101][101]={0},vb, dl[8]={0, 1, 0, -1, -1, 1, -1, 1}, dc[8]={1, 0, -1, 0, -1, 1, 1 ,-1},lv,cv,k,xp,yp,xf,yf,j,i,n,m;
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(a[i], 101);
}
for(int i=0; i<=n; i++)
{ for(int j=m; j>0; j--)
{
a[i][j] = a[i][j-1];
if(a[i][j] == 'R')
{xp = i; yp = j;}
else if(a[i][j] == 'J')
{xf = i; yf = j;}
}
}
for(j=0;j<=m+1;j++)
{
a[0][j]='/';
a[n+1][j]='/';
}
for(i=0;i<=n+1;i++)
{
a[i][0]='/';
a[i][m+1]='/';
}
k=1; dr[xp][yp]=k;
do
{
vb=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(dr[i][j]==k)
{
for(int x=0;x<=8;x++)
{
lv=i+dl[x];
cv=j+dc[x];
if(dr[lv][cv]==0 && a[lv][cv]!='/' && a[lv][cv]!='X')
{
dr[lv][cv]=k+1;
vb=1;
}
}
}
}
}
if(vb)k++;
}while(vb);
k=1;dj[xf][yf]=k;
do
{
vb=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(dj[i][j]==k)
{
for(int x=0;x<=8;x++)
{
lv=i+dl[x];
cv=j+dc[x];
if(dj[lv][cv]==0 && a[lv][cv]!='X')
{
dj[lv][cv]=k+1;
vb=1;
}
}
}
}
}
if(vb)k++;
}while(vb);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(dr[i][j]==dj[i][j] && dr[i][j]!=0 && dj[i][j]!=0)
{
g<<i<<" "<<dr[i][j]<<" "<<j;
}
}
}
}