Cod sursa(job #896383)
using namespace std;
#include<iostream>
#include<fstream>
ifstream f("rj.in");
ofstream g("rj.out");
int x[105][105],yl[105][105];
int dx[]={-1,-1,0,1,1,1,0,-1}; int dy[]={0,1,1,1,0,-1,-1,-1};
int k,xu,y,xnou,ynou,r;
int l[10010], c[10010], variantex[8],variantey[8];
char a[105];
int ga;
int main()
{
int n,m;
int i,j;
f>>n>>m;
for(i=0; i<=n; i++)
{
f.getline(a+1, 105);
for(j=1; j<=m; j++)
{
if(a[j]=='X')
x[i][j]=0;
if(a[j]==' ')
{x[i][j]=-1; yl[i][j]=-1;}
if(a[j]=='R')
{ x[i][j]=1;
k++;
l[k]=i;
c[k]=j;
}
if(a[j]=='J')
{k++; x[i][j]=2;
l[k]=i;
c[k]=j;
}
}
}
k=2; bool ok=false;
for(i=1; i<=k; i++)
{
xu=l[i]; y=c[i];
for(r=0; r<8; r++)
{
xnou = xu+dx[r];
ynou = y+dy[r];
if(x[xnou][ynou]==-1)
{
x[xnou][ynou]=x[xu][y];
k++;
l[k]=xnou;
c[k]=ynou;
}
if(x[xnou][ynou]==1||x[xnou][ynou]==2)
{
if(x[xu][y]!=x[xnou][ynou])
{ ok=true; variantex[ga]=xnou; variantey[ga]=ynou; ga++; }
}
}
if(ok==true)
break;
}
int aux;
for(i=1; i<ga; i++)
{
if(variantex[i-1]>variantex[i])
{
aux=variantex[i+1];
variantex[i+1]=variantex[i];
variantex[i]=aux;
aux=variantey[i+1];
variantey[i+1]=variantey[i];
variantey[i]=aux;
}
}i=0;
while(variantex[i]==variantex[i+1])
{
if(variantey[i]>variantey[i+1])
{
aux=variantey[i+1];
variantey[i+1]=variantey[i];
variantey[i]=aux;
}
i++;
}
k=1;
for(i=1; i<=k; i++)
{
xu=l[i]; y=c[i];
for(r=0; r<8; r++)
{
xnou = xu+dx[r];
ynou = y+dy[r];
if(yl[xnou][ynou]==-1)
{
yl[xnou][ynou]=yl[xu][y]+1;
k++;
l[k]=xnou;
c[k]=ynou;
}
}
}
g<<yl[variantex[0]][variantey[0]]+1<<" "<<variantex[0]<<" "<<variantey[0];
}