Cod sursa(job #3153455)

Utilizator AndreiKatsukiAndrei Dogarel AndreiKatsuki Data 29 septembrie 2023 18:22:31
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

const int NMAX = 105;
int romeo[NMAX][NMAX], julieta[NMAX][NMAX], drum[NMAX][NMAX], n, m;
string a[NMAX];
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};

struct Pozitie{
    int x, y;
}pozRomeo, pozJulieta;

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

void lee(int path[NMAX][NMAX], int i, int j, int iFinal, int jFinal){
    path[i][j] = 0;
    queue<pair<int, int>> q;
    q.push({i, j});
    while(!q.empty()){
        int x = q.front().first;
        int y = q.front().second;
        q.pop();
        for(int d = 0; d < 4; ++d){
            int inou = x + dx[d];
            int jnou = y + dy[d];
            if(inMat(inou, jnou) && drum[inou][jnou] == 0 && path[inou][jnou] == 0){
                path[inou][jnou] = path[x][y] + 1;
                q.push({inou, jnou});
                if(inou == iFinal && jnou == jFinal){
                    return;
                }
            }
        }
    }
}

int main(){
    f >> n >> m;
    // f.get();
    for(int i = 1; i <= n; ++i){
        getline(f, a[i]);
        for(int j = 0; j < a[i].size(); ++j){
            if(a[i][j] == 'R'){
                pozRomeo.x = i;
                pozRomeo.y = j + 1;
            }
            if(a[i][j] == 'J'){
                pozJulieta.x = i;
                pozJulieta.y = j + 1;
            }
            if(a[i][j] == 'X'){
                drum[i][j + 1] = -1;
            }
        }
    }
    lee(romeo, pozRomeo.x, pozRomeo.y, pozJulieta.x, pozJulieta.y);
    lee(julieta, pozJulieta.x, pozJulieta.y, pozRomeo.x, pozRomeo.y);
    int res = 1e9, x, y;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            if(romeo[i][j] == julieta[i][j] && res > romeo[i][j] && romeo[i][j]){
                res = romeo[i][j];
                x = i;
                y = j;
            }
        }
    }
    g << res << " " << x << " " << y;
    return 0;
}