Cod sursa(job #2418309)

Utilizator Rufus007Marincia Catalin Rufus007 Data 4 mai 2019 16:25:12
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#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;
}