Pagini recente » Cod sursa (job #1657487) | Cod sursa (job #841143) | Cod sursa (job #686640) | preONI 2005 runda #1 - solutii | Cod sursa (job #2216084)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX = 100;
struct poz {
unsigned char x, y;
};
poz C[DMAX*DMAX+1];
int N, M;
short Ro[DMAX+2][DMAX+2],
Ju[DMAX+2][DMAX+2];
poz pRo, pJu;
int tmin = DMAX*DMAX+1, xmin, ymin,
d[8][2] = {{0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}};
void cit() {
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':
pJu.x = i;
pJu.y = j;
Ju[i][j] = 1;
break;
case 'X':
Ro[i][j] = -1;
Ju[i][j] = -1;
break;
}
}
}
}
void bord() {
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(poz pstart, short int L[][DMAX+2]) {
poz 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()
{
cit();
bord();
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;
return 0;
}