Pagini recente » Cod sursa (job #2227406) | Cod sursa (job #2104005) | Cod sursa (job #666590) | Cod sursa (job #225517) | Cod sursa (job #2185048)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX=100;
struct pozitie
{
unsigned char x,y;
};
pozitie C[DMAX*DMAX+1];
int N,M,p=0,u=0;
short int ro[DMAX+2][DMAX+2];
short int jo[DMAX+2][DMAX+2];
pozitie pjo,pro;
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 citire()
{
f>>N>>M;
f.get();
for(int i=1; i<=N; i++)
{
char c[DMAX+2];
f.getline(c+1,DMAX+1);
for(int j=1; j<=M; j++)
{
switch(c[j])
{
case 'R':
pro.x=i;
pro.y=j;
ro[i][j]=1;
break;
case 'J':
pjo.x=i;
pjo.y=j;
jo[i][j]=1;
break;
case 'X':
jo[i][j]=-1;
ro[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]=jo[0][j]=jo[N1][j]=-1;
for(int i=0; i<=N1; i++)
ro[i][0]=ro[i][M1]=jo[i][0]=jo[i][M1]=-1;
}
void Lee(pozitie ps,short int L[][DMAX+2])
{
pozitie vec, crt;
p = 1,u=1;
C[1]=ps;
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(pjo,jo);
for(int i=1; i<=N; i++)
for(int j=1; j<=M; j++)
if(ro[i][j]>0 && ro[i][j]==jo[i][j] && ro[i][j]<tmin)
{
tmin=ro[i][j];
xmin=i;
ymin=j;
}
g<<tmin<< ' '<<xmin<<' '<<ymin;
return 0;
}