Pagini recente » Cod sursa (job #1330101) | Cod sursa (job #113650) | Cod sursa (job #620404) | Cod sursa (job #2547586) | Cod sursa (job #3185019)
#include <fstream>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct crd{int x,y;}vecinr,vecinj,r,juliet,q[100001],q1[100001];
int v[101][101];
const int dl[]={-1,-1,-1,0,1,1,1,0};
const int dc[]={-1,0,1,1,1,0,-1,-1};
int incr=0,sfr=0;
int incj=0,sfj=0;
void LEE(int v[][101],crd pcrtr,crd pcrtj,crd vecinr,crd vecinj,crd q[],crd q1[],crd r,crd juliet)
{
q[0]=r;
q1[0]=juliet;
int cnt=0;
v[pcrtr.x][pcrtr.y]=1;
v[pcrtj.x][pcrtj.y]=1;
while((incr<=sfr||incj<=sfj)&&cnt==0)
{
pcrtr=q[incr++];
pcrtj=q1[incj++];
for(int i=0;i<8&&cnt==0;i++)
{
vecinr.x=pcrtr.x+dl[i];
vecinr.y=pcrtr.y+dc[i];
vecinj.x=pcrtj.x+dl[i];
vecinj.y=pcrtj.y+dc[i];
if(v[vecinr.x][vecinr.y]==0||v[vecinr.x][vecinr.y]==v[pcrtr.x][pcrtr.y]+1)
{
if(v[vecinr.x][vecinr.y]==0)
{
v[vecinr.x][vecinr.y]=v[pcrtr.x][pcrtr.y]+1;
q[++sfr]=vecinr;
}
else
{
cnt=1;
q[++sfr]=vecinr;
q1[++sfj]=vecinr;
}
}
if(v[vecinj.x][vecinj.y]==0||v[vecinj.x][vecinj.y]==v[pcrtj.x][pcrtj.y]+1)
{
if(v[vecinj.x][vecinj.y]==0)
{
v[vecinj.x][vecinj.y]=v[pcrtj.x][pcrtj.y]+1;
q1[++sfj]=vecinj;
}
else
{
cnt=1;
q1[++sfj]=vecinj;
q[++sfr]=vecinj;
}
}
}
}
}
int main()
{
int n,m;
string d;
cin>>n>>m;
cin.get();
for(int i=1;i<=n;i++)
{
getline(cin,d);
for(int j=0;j<m;j++)
if(d[j]=='R')
{
r.x=i;
r.y=j+1;
}
else if(d[j]=='J')
{
juliet.x=i;
juliet.y=j+1;
}
else if(d[j]=='X')
v[i][j+1]=-1;
}
for(int i=0;i<=n+1;i++)
{
v[i][0]=-1;
v[i][m+1]=-1;
}
for(int i=0;i<=m+1;i++)
{
v[0][i]=-1;
v[n+1][i]=-1;
}
LEE(v,r,juliet,vecinr,vecinj,q,q1,r,juliet);
cout<<v[q[sfr].x][q[sfr].y]<<' '<<q[sfr].x<<' '<<q[sfr].y;
}