Cod sursa(job #3135480)

Utilizator catalinmarincatalinmarin catalinmarin Data 3 iunie 2023 13:51:46
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short VeciniX[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
short VeciniY[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
struct Punct{
    int x;
    int y;
};
queue<Punct> qJ;
queue<Punct> qR;
int linii, coloane;
int MatJulieta[101][101] = {0};
int MatRomeo[101][101] = {0};
bool InMat(Punct P){
    return P.x > 0 && P.x <= linii && P.y > 0 && P.y <= coloane;
}
void Lee(int mat[][101], queue<Punct> &q){
    while (!q.empty()){
        Punct frn = q.front();
        for (int i = 0; i < 8; i++){
            Punct Vecin;
            Vecin.x = frn.x + VeciniX[i];
            Vecin.y = frn.y + VeciniY[i];
            if (InMat(Vecin) && mat[Vecin.x][Vecin.y] == 0){
                mat[Vecin.x][Vecin.y] = mat[frn.x][frn.y] + 1;
                q.push(Vecin);
            }
        }
        q.pop();
    }
}
int main(){
    fin >> linii >> coloane;
    for (int i = 0; i <= linii; i++){
        string str;
        getline(fin , str);
        for (int j = 0; j < str.size(); j++){
            if (str[j] == 'R') {
                MatRomeo[i][j + 1] = 1;
                qR.push({i, j + 1});
            }
            else if (str[j] == 'J') {
                MatJulieta[i][j + 1] = 1;
                qJ.push({i, j + 1});
            }
            else if (str[j] == 'X') {
                MatRomeo[i][j+1] = -1;
                MatJulieta[i][j+1] = -1;
            }
        }
    }
    Lee(MatRomeo, qR);
    Lee(MatJulieta, qJ);
    for (int i = 1; i <= linii; i++){
        for (int j = 1; j <= coloane; j++){
            if (MatRomeo[i][j] == MatJulieta[i][j] && MatRomeo[i][j] > 0){
                fout << MatRomeo[i][j] << " " << i << " " << j << " " << " ";
                break;
            }
        }
    }
    return 0;
}