Pagini recente » Cod sursa (job #2703465) | Cod sursa (job #225111) | Cod sursa (job #920317) | Cod sursa (job #2621378) | Cod sursa (job #2418309)
#include <cstring>
#include <fstream>
std::ifstream fin("rj.in");
std::ofstream fout("rj.out");
const int NMAX = 101;
char harta[NMAX][NMAX];
int romeo[NMAX][NMAX], julieta[NMAX][NMAX], rx, ry, jx, jy, N, M;
struct punct {
int x, y;
} coada[NMAX * NMAX], v;
int lin[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, col[8] = {0, 1, 1, 1, 0, -1, -1, -1};
void lee(int a[][NMAX], int x, int y) {
int p, u;
p = u = 0;
coada[p].x = x;
coada[p].y = y;
a[x][y] = 1;
while (p <= u) {
v = coada[p++];
for (int k = 0; k < 8; ++k) {
int nl = v.x + lin[k];
int nc = v.y + col[k];
if (nl >= 0 && nl < N && nc >= 0 && nc < M && harta[nl][nc] == ' ' &&
a[nl][nc] == 0) {
a[nl][nc] = a[v.x][v.y] + 1;
coada[++u].x = nl;
coada[u].y = nc;
}
}
}
}
int main() {
fin >> N >> M;
fin.get();
for (int i = 0; i < N; ++i) {
fin.getline(harta[i], 101);
for (int j = 0; j < strlen(harta[i]); ++j)
if (harta[i][j] == 'R') {
harta[i][j] = ' ';
rx = i;
ry = j;
} else if (harta[i][j] == 'J') {
harta[i][j] = ' ';
jx = i;
jy = j;
}
}
lee(romeo, rx, ry);
lee(julieta, jx, jy);
int minim = 200000, minx, miny;
for (int i = 0; i < N; ++i)
for (int j = 0; j < M; ++j)
if (julieta[i][j] == romeo[i][j] && romeo[i][j] != 0) {
if (julieta[i][j] < minim) {
minim = julieta[i][j];
minx = i;
miny = j;
}
}
fout << minim << ' ' << minx + 1 << ' ' << miny + 1;
fin.close();
fout.close();
return 0;
}