Pagini recente » Cod sursa (job #3148485) | Cod sursa (job #3290357) | Cod sursa (job #3171237) | Cod sursa (job #3255652) | Cod sursa (job #3293729)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int DMAX=1000;
struct pozitie
{
short x,y;
};
pozitie C[DMAX*DMAX+1];
int N,M;
int Ro[DMAX+2][DMAX+2];
int Ju[DMAX+2][DMAX+2];
pozitie pRo, pJu;
int tmin=DMAX*DMAX+1, xmin, ymin;
int d[8][2] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}, {-1, -1}, {-1, 1}, {1, 1}, {1, -1}};
ifstream f("rj.in");
ofstream g("rj.out");
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;
}
}
}
}
void bordare()
{
int M1=M+1, N1=N+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 pstart, int L[][DMAX+2])
{
pozitie crt,vec;
int p=1, u=1;
C[1]=pstart;
while(p<=u)
{
crt=C[p++];
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;
C[++u]=vec;
}
}
}
}
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] > 0 && Ro[i][j] == Ju[i][j] && Ro[i][j] < tmin)
{
tmin=Ro[i][j];
xmin=i;
ymin=j;
}
g<<tmin<<' '<<xmin<<' '<<ymin;
f.close();
g.close();
return 0;
}