Cod sursa(job #2949523)

Utilizator rares89_Dumitriu Rares rares89_ Data 30 noiembrie 2022 21:09:26
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

const int di[] = {-1, 0, 1, 0, -1, -1, 1, 1};
const int dj[] = {0, 1, 0, -1, -1, 1, 1, -1};

int n, m, matrLeeR[105][105], matrLeeJ[105][105];
int iR, jR, iJ, jJ;
bool v[105][105];

bool inMat(int i, int j) {
    return i >= 1 && i <= n && j >= 1 && j <= m;
}

void lee(int i, int j, int matrLee[105][105]) {
    queue<pair<int, int>> Q;
    Q.push({i, j});
    matrLee[i][j] = 1;
    while(!Q.empty()) {
        i = Q.front().first;
        j = Q.front().second;
        Q.pop();
        for(int d = 0; d < 8; d++) {
            int ii = i + di[d];
            int jj = j + dj[d];
            if(inMat(ii, jj) && v[ii][jj] && matrLee[ii][jj] == 0) {
                matrLee[ii][jj] = matrLee[i][j] + 1;
                Q.push({ii, jj});
            }
        }
    }
}

int main() {
    fin >> n >> m;
    fin.get();
    string s;
    for(int i = 1; i <= n; i++) {
        getline(fin, s);
        for(int j = 1; j <= m; j++) {
            v[i][j] = (s[j - 1] == ' ');
            if(s[j - 1] == 'R') {
                iR = i, jR = j;
            } else if(s[j - 1] == 'J') {
                iJ = i, jJ = j;
            }
        }
    }
    lee(iR, jR, matrLeeR);
    lee(iJ, jJ, matrLeeJ);
    int tmin = 2e9, x = 0, y = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            if(matrLeeR[i][j] == matrLeeJ[i][j] && matrLeeR[i][j] > 0) {
                if(matrLeeR[i][j] < tmin) {
                    tmin = matrLeeR[i][j];
                    x = i, y = j;
                }
            }
        }
    }
    fout << tmin << " " << x << " " << y;
    return 0;
}