Cod sursa(job #2663687)

Utilizator dianapingu1Diana Vasiliu dianapingu1 Data 27 octombrie 2020 00:45:27
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <fstream>
#include <queue>

using namespace std;

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

int n,m;
int rom[102][102];
int jul[102][102];
char linie[102];
int x1,y1, x2,y2;
int dl[8] = {0,-1,-1,-1,0,1,1,1};
int dc[8] = {-1,-1,0,1,1,1,0,-1};

void make_path(int a[][102], int lin, int col) {
    pair<int,int> elem;
    pair<int,int> v;
    queue<pair<int,int>> coada;

    coada.push(make_pair(lin, col));

    while(!coada.empty()) {
        elem = coada.front();
        coada.pop();
        for (int i=0; i<8; i++) {
            v.first = elem.first + dl[i];
            v.second = elem.second + dc[i];

            if (a[v.first][v.second] == 0) {
                coada.push(v);
                a[v.first][v.second] = a[elem.first][elem.second] + 1;
            }
        }
    }
}

int main() {

    fin >> n >> m;
    fin.get();

    for (int i=0; i<=n+1; i++) {
        rom[i][0] = jul[i][0] = -1;
        rom[i][m+1] = jul[i][m+1] = -1;
    }

    for (int j=0; j<=m+1; j++) {
        rom[0][j] = jul[0][j] = -1;
        rom[n+1][j] = jul[n+1][j] = -1;
    }

    for (int i=1; i<=n; i++) {
        fin.getline(linie,102);
        for (int j=0; j<m; j++) {
            if (linie[j] == 'X') {
                rom[i][j+1] = jul[i][j+1] = -1;
            }
            else {
                if (linie[j] == 'R') {
                    rom[i][j+1] = 1;
                    x1 = i;
                    y1 = j+1;
                }
                else {
                    if (linie[j] == 'J') {
                        jul[i][j+1] = 1;
                        x2 = i;
                        y2 = j+1;
                    }
                }
            }
        }
    }

    make_path(rom,x1,y1);
    make_path(jul,x2,y2);

    int mini = 100005;
    int pi, pj;

    for(int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            if (rom[i][j] == jul[i][j] && rom[i][j] > 0 && rom[i][j] < mini) {
                mini = rom[i][j];
                pi = i;
                pj = j;
            }
        }
    }

    fout << mini << " " << pi << " " << pj;

    return 0;
}