Pagini recente » Cod sursa (job #1537312) | Cod sursa (job #49515) | Cod sursa (job #2946256) | Cod sursa (job #140311) | Cod sursa (job #3292755)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
const int DMAX=100;
ifstream f("rj.in");
ofstream g("rj.out");
struct pozitie
{
short x,y;
};
int M,N,Ro[DMAX+2][DMAX+2],Ju[DMAX+2][DMAX+2];
int p,u;
pozitie pRo;
pozitie pJu;
int tmin=DMAX*DMAX+1, xmin, ymin;
int d[8][2] = {{0, -1},{-1,-1}, {-1, 0}, {-1,1}, {0, 1}, {1,1}, {1, 0}, {1,-1}};
void bordare()
{
int N1=N+1, M1=M+1;
for(int j=0;j<=M1;j++)
Ro[0][j]=Ro[N1][j]=Ju[0][j]=Ju[N1][j]=-1;
for(int i=0;i<=N1;i++)
Ro[i][0]=Ro[i][M1]=Ju[i][0]=Ju[i][M1]=-1;
}
void Lee(pozitie ps, int L[][DMAX+2])
{
queue<pozitie> Q;
pozitie crt, vec;
Q.push(ps);
while(!Q.empty())
{
crt = Q.front();
Q.pop();
for(int k = 0; k < 8; k++)
{
vec.x = crt.x + d[k][0];
vec.y = crt.y + d[k][1];
if(L[vec.x][vec.y] == 0)
{
L[vec.x][vec.y] = L[crt.x][crt.y] + 1;
Q.push(vec);
}
}
}
}
void citire()
{
char c;
f>>N>>M;
for(int i=1; i<=N; i++)
{
f.get();
for(int j=1; j<=M; j++)
{
f.get(c);
switch(c)
{
case 'R':
pRo.x=i;
pRo.y=j;
Ro[i][j]=1;
break;
case 'J':
pJu.x=i;
pJu.y=j;
Ju[i][j]=1;
break;
case 'X':
Ro[i][j]=-1;
Ju[i][j]=-1;
}
}
}
}
int main()
{
citire();
bordare();
Lee(pRo,Ro);
Lee(pJu,Ju);
for(int i=1; i<=N; i++)
for(int j=1; j<=M; j++)
if(Ro[i][j]==Ju[i][j] && Ro[i][j]<tmin && Ro[i][j]>0)
tmin=Ro[i][j], xmin=i, ymin=j;
g<<tmin<<' '<<xmin<<' '<<ymin;
f.close();
g.close();
return 0;
}