Pagini recente » Cod sursa (job #2246450) | Cod sursa (job #4657) | Cod sursa (job #1155823) | Cod sursa (job #2512042) | Cod sursa (job #2473573)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue<pair<int,int> >q1,q2;
int di[9]={-1,-1,0,1,1,1,0,-1};
int dj[9]={0,1,1,1,0,-1,-1,-1};
int v[105][105][2],i,j,ir,jr,ij,jj,n,m;
char c[105];
int main()
{
fin>>n>>m;
fin.getline(c,105);
for(i=1;i<=n;i++)
{
fin.getline(c,105);
for(j=0;j<m;j++)
{
if(c[j]=='X')
v[i][j+1][0]=-1;
else
if(c[j]=='R')
{
ir=i;
jr=j+1;
}
else
if(c[j]=='J')
{
ij=i;
jj=j+1;
}
}
}
v[ir][jr][0]=1;
v[ir][jr][1]=1;
v[ij][jj][0]=1;
v[ij][jj][1]=2;
q1.push(make_pair(ir,jr));
q2.push(make_pair(ij,jj));
while(!q1.empty() && !q2.empty())
{
int i1=q1.front().first,j1=q1.front().second,i2=q2.front().first,j2=q2.front().second;
q1.pop();
q2.pop();
for(int d=0;d<8;d++)
{
int in=i1+di[d];
int jn=j1+dj[d];
if(in>0&&jn>0&&in<=n&&jn<=m&&v[in][jn][0]==0)
{
q1.push(make_pair(in,jn));
v[in][jn][0]=v[i1][j1][0]+1;
v[in][jn][1]=1;
}
if(v[in][jn][1]==2)
{
while(!q1.empty() && !q2.empty())
{
q1.pop();
q2.pop();
}
fout<<v[in][jn][0]+1<<" "<<i1<<" "<<j1;
}
}
for(int d=0;d<8;d++)
{
int in=i2+di[d];
int jn=j2+dj[d];
if(in>0&&jn>0&&in<=n&&jn<=m&&v[in][jn][0]==0)
{
q2.push(make_pair(in,jn));
v[in][jn][0]=v[i2][j2][0]+1;
v[in][jn][1]=2;
}
if(v[in][jn][1]==1)
{
while(!q1.empty() && !q2.empty())
{
q1.pop();
q2.pop();
}
fout<<v[in][jn][0]+1<<" "<<i2<<" "<<j2;
}
}
}
return 0;
}