Pagini recente » Cod sursa (job #581455) | Cod sursa (job #2243269) | Cod sursa (job #3185510) | Cod sursa (job #1614304) | Cod sursa (job #3289557)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int lin[8]= {-1,-1,0,1,1, 1, 0,-1};
int col[8]= { 0, 1,1,1,0,-1,-1,-1};
/// N, NE,E,SE,S,SV,V,NV
int R[101][101],J[101][101],Rc,Rl,Jc,Jl,n,m,i,j,tmin,imin,jmin;
char c;
queue<pair<int,int> > q;
pair<int,int> aux;
int main()
{
fin>>n>>m;
for (i=1; i<=n; i++)
{
fin.get(c);
for (j=1; j<=m; j++)
{
fin.get(c);
if (c=='X')
{
R[i][j]=-1;
J[i][j]=-1;
}
else if (c=='R')
{
Rc=j;
Rl=i;
R[i][j]=1;
}
else if (c=='J')
{
Jc=j;
Jl=i;
J[i][j]=1;
}
}
}
for (i=0; i<=n+1; i++)
{
R[i][0]=-1;
R[i][m+1]=-1;
J[i][0]=-1;
J[i][m+1]=-1;
}
for (j=0; j<=m+1; j++)
{
R[0][j]=-1;
R[n+1][j]=-1;
J[0][j]=-1;
J[n+1][j]=-1;
}
q.push(make_pair(Rl,Rc));
while (!q.empty())
{
aux=q.front();
for (int dir=0; dir<8; dir++)
{
i=aux.first+lin[dir];
j=aux.second+col[dir];
if (R[i][j]==0)
{
R[i][j]=R[aux.first][aux.second]+1;
q.push(make_pair(i,j));
}
}
q.pop();
}
q.push(make_pair(Jl,Jc));
while (!q.empty())
{
aux=q.front();
for (int dir=0; dir<8; dir++)
{
i=aux.first+lin[dir];
j=aux.second+col[dir];
if (J[i][j]==0)
{
J[i][j]=J[aux.first][aux.second]+1;
q.push(make_pair(i,j));
}
}
q.pop();
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (R[i][j]==J[i][j] && R[i][j]>0)
{
if (tmin==0 || R[i][j]<tmin)
{
tmin=R[i][j];
imin=i;
jmin=j;
}
}
}
}
fout<<tmin<<" "<<imin<<" "<<jmin;
return 0;
}