Cod sursa(job #2989061)

Utilizator SarakottoBogudanSaracut Bogdan Andrei SarakottoBogudan Data 5 martie 2023 19:19:18
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <fstream>
#include <string>
#include <vector>
#include <queue>

using namespace std;

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

struct coord{
    int lin, col;
};

int n, m;
int romeo[101][101];
int julieta[101][101];

coord jul;
coord rom;
coord intalnire;

queue < coord > q;

string s;

int dir[8][2] = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};

bool in_mat(coord a)
{
    return a.lin >= 1 && a.lin <= n && a.col >= 1 && a.col <= m;
}

void lee(int v[][101], coord st)
{
    v[st.lin][st.col] = 1;
    q.push(st);
    while(!q.empty())
    {
        coord cur = q.front();
        q.pop();
        coord vecin;
        for(int d = 0; d < 8; d++)
        {
            vecin.lin = cur.lin + dir[d][0];
            vecin.col = cur.col + dir[d][1];
            if(in_mat(vecin) && v[vecin.lin][vecin.col] == 0)
            {
                q.push(vecin);
                v[vecin.lin][vecin.col] = v[cur.lin][cur.col] + 1;
            }
        }
    }
}

int main()
{
    int minim = 10000;
    cin >> n >> m;
    getline(cin, s);
    for(int i = 1; i <= n; i++)
    {
        getline(cin, s);
        for(int j = 0; j < m; j++)
        {
            if(s[j] == 'R')
            {
                rom.lin = i;
                rom.col = j + 1;
            }
            else if(s[j] == 'J')
            {
                jul.lin = i;
                jul.col = j + 1;
            }
            else if(s[j] == 'X')
            {
                romeo[i][j + 1] = -1;
                julieta[i][j + 1] = -1;
            }
        }
        s.clear();
    }
    lee(romeo, rom);
    lee(julieta, jul);
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            if(romeo[i][j] == julieta[i][j] && romeo[i][j] < minim && romeo[i][j] != -1 && romeo[i][j] != 0)
            {
                minim = romeo[i][j];
                intalnire.lin = i;
                intalnire.col = j;
            }
        }
    }
    cout << minim << " " << intalnire.lin << " " << intalnire.col;
    return 0;
}