Cod sursa(job #2136255)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 19 februarie 2018 19:45:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.5 kb
#include <fstream>

using namespace std;

ifstream cin("rj.in");
ofstream cout("rj.out");

int dl[4] = {-1, 0, 1, 0};
int dc[4] = {0, -1, 0, 1};

pair < int, int > qr[10005], qj[10005];

int dr[105][105], dj[105][105];

char a[105][105];

void lee(pair < int, int > q[10005], int d[105][105], char ch) {
    int dr(0), st(0);
    while (st <= dr) {
        pair < int, int > x = q[st++];
        for (int i = 0; i < 4; ++i) {
            pair < int, int > _x = make_pair(x.first + dl[i], x.second + dc[i]);
            if ((a[_x.first][_x.second] == ' ' || a[_x.first][_x.second] == ch) && d[_x.first][_x.second] == 0) {
                    //if (_x.first == 1 && _x.second == 2) {
                    //    cout << d[_x.first][_x.second] << "<-- aici a gresit !\n";
                    //}
                d[_x.first][_x.second] = d[x.first][x.second] + 1;
                q[++dr] = _x;
            }
        }
    }
}

int main()
{
    int n, m, _min(10005), ras1, ras2;
    cin >> n >> m >> ws;
    for (int i = 1; i <= n; ++i) {
        cin.getline(1 + a[i], 180);
        cout << (1 + a[i]) << " ";
        for (int j = 1; j <= m; ++j) {
            if (a[i][j] == 'R') {
                qr[0] = make_pair(i, j);
                cout << i << " " << j << " ";
                dr[i][j] = 1;
            }
            if (a[i][j] == 'J') {
                qj[0] = make_pair(i, j);
                cout << i << " " << j << " ";
                dj[i][j] = 1;
            }
        }
        cout << "\n";
    }
//    for (int i = 1; i <= n; ++i) {
//        for (int j = 1; j <= m; ++j) {
//            cout << a[i][j] << " ";
//        }
//        cout << "\n";
//    }
//    cout << "\n";
    lee(qr, dr, 'J');
    lee(qj, dj, 'R');
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j<= m; ++j) {
            cout << dr[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j<= m; ++j) {
            cout << dj[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (a[i][j] != 'X' && dr[i][j] == dj[i][j] && dr[i][j] != 0) {
                if (dr[i][j] < _min) {
                    _min = dr[i][j];
                    ras1 = i;
                    ras2 = j;
                }
            }
        }
    }
    cout << _min - 1 << " " << ras1 << " " << ras2;
    return 0;
}