Cod sursa(job #2739429)

Utilizator matei.tudoseMatei Tudose matei.tudose Data 8 aprilie 2021 11:19:55
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.42 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <string>
using namespace std;

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

struct coord
{
    int linie, col;
};

int n, m, mat1[105][105], mat2[105][105];
char litera;

queue<coord> coada;

coord Romeo;
coord Julieta;
coord punct_de_intalnire;


bool este_in_mat(int linie, int col)
{
    return (1 <= linie && linie <= n && 1 <= col && col <= m);
}

void Lee(coord start, int mat_curent[105][105])
{
    coada.push(start);
    while (!coada.empty())
    {
        coord curent = coada.front();
        coada.pop();
        int dirLinie[8] = {-1, 0, 1, 0, -1, 1, 1, -1};
        int dirCol[8] = {0, 1, 0, -1, -1, -1, 1, 1};
        for (int i = 0; i < 8; i++)
        {
            coord vecin;
            vecin.linie = curent.linie + dirLinie[i];
            vecin.col = curent.col + dirCol[i];
            if (mat_curent[vecin.linie][vecin.col] == 0 && este_in_mat(vecin.linie, vecin.col))
            {
                coada.push(vecin);
                mat_curent[vecin.linie][vecin.col] = mat_curent[curent.linie][curent.col] + 1;
            }
        }
    }
}

int main()
{
    fin >> n >> m;
    string rand;
    getline(fin, rand);
    for (int i = 1; i <= n; i++)
    {
        getline(fin, rand);
        for (int j = 1; j <= m; j++)
        {
            litera = rand[j - 1];
            if (litera == 'R')
            {
                mat1[i][j] = 1;
                Romeo.linie = i;
                Romeo.col = j;
            }
            else if (litera == 'J')
            {
                mat2[i][j] = 1;
                Julieta.linie = i;
                Julieta.col = j;
            }
            else if (litera == 'X')
            {
                mat1[i][j] = -1;
                mat2[i][j] = -1;
            }
        }
    }
    
    Lee(Romeo, mat1);
    Lee(Julieta, mat2);
    int punct_de_intalnire_val = 100000;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            int casuta1 = mat1[i][j];
            int casuta2 = mat2[i][j];
            if ( casuta1 == casuta2 && casuta1 > 0 && casuta1 < punct_de_intalnire_val)
            {
                punct_de_intalnire_val = casuta1;
                punct_de_intalnire.linie = i;
                punct_de_intalnire.col = j;
            }
        }
    }
    fout << punct_de_intalnire_val << " " << punct_de_intalnire.linie << " " << punct_de_intalnire.col << "\n";
    return 0;
}