Cod sursa(job #2581395)

Utilizator ililogIlinca ililog Data 15 martie 2020 10:19:46
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.28 kb
using namespace std;
#include<bits/stdc++.h>

int n, m;
int linr, colr, linj, colj;
char c[101][101];
int matr[101][101], matj[101][101];
pair<int,int> intalnire;
int pasi;

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

void LeeRomeo(int linr, int colr) {

    queue<pair<int,int> > q;

    q.push(make_pair(linr, colr));

    matr[linr][colr] = 1;

    while (!q.empty()) {

        int i = q.front().first, j = q.front().second;

        for (int k = 0; k<4; k++) {
            int iv = i + di[k];
            int jv = j + dj[k];

            if (1 <= iv && iv <= n && 1 <= jv && jv <= m && matr[iv][jv] == 0 && c[iv][jv] != 'X') {
                matr[iv][jv] = matr[i][j] + 1;
                q.push(make_pair(iv,jv));
            }
        }

        q.pop();
    }

}

void LeeJulieta(int linj, int colj) {

    queue<pair<int,int> > q;

    q.push(make_pair(linj, colj));

    matj[linj][colj] = 1;

    while (!q.empty()) {

        int i = q.front().first, j = q.front().second;

        for (int k = 0; k<4; k++) {
            int iv = i + di[k];
            int jv = j + dj[k];

            if (1 <= iv && iv <= n && 1 <= jv && jv <= m && matj[iv][jv] == 0 && c[iv][jv] != 'X') {
                matj[iv][jv] = matj[i][j] + 1;
                q.push(make_pair(iv,jv));
            }
        }

        q.pop();
    }

}

int main() {

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

    fin >> n >> m;

    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++) {

            fin.get(c[i][j]);

            if (c[i][j] == '\n') {

                if (j == 1) {
                    fin.get(c[i][j]);
                }

                if (j == m) {
                    c[i][j] = ' ';
                }
            }

            //cout << c[i][j];

            if (c[i][j] == 'R') {
                linr = i;
                colr = j;
            }

            if (c[i][j] == 'J') {
                linj = i;
                colj = j;
            }
        }
       // cout << endl;
    }

    //cout << linr << " " << colr << endl << linj << " " << colj << endl;

    LeeRomeo(linr, colr);

    /*for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++) {
            cout << matr[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;*/

    LeeJulieta(linj, colj);

    /*for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++) {
            cout << matj[i][j] << " ";
        }
        cout << endl;
    }*/

    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=m; j++) {
            if (matr[i][j] != 0 && matr[i][j] == matj[i][j]) {

                if (intalnire.first == 0 && intalnire.second == 0) {
                    intalnire.first = i;
                    intalnire.second = j;
                    pasi = matr[i][j];
                } else {
                    if (matr[i][j] < pasi) {
                        intalnire.first = i;
                        intalnire.second = j;
                        pasi = matr[i][j];
                    }
                }

            }
        }
    }

    fout << intalnire.first << " " << intalnire.second << " " << pasi-1;

    fin.close();
    fout.close();

    return 0;
}