Cod sursa(job #2893640)

Utilizator LelFunXDCirimpei Luca LelFunXD Data 26 aprilie 2022 14:48:53
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb


#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue < pair <int, int> > coada;
int dx[] = { 0, 1, 0, -1, -1, 1, 1, -1 };
int dy[] = { 1, 0, -1, 0, 1, 1, -1, -1 };
int a[110][110];
int n, m;
int x, y; 
int iR, jR, iJ, jJ;
char c[110][110];
int tmin = 300;
int pozi, pozj;
bool border(int a, int b)
{
    return a >= 1 && a <= n && b >= 1 && b <= m;
}
void Lee()
{
    while (!coada.empty())
    {
        x = coada.front().first;
        y = coada.front().second;
        coada.pop();
        for (int i = 0; i <= 7; i++)
        {
            int inou = x + dx[i]; 
            int jnou = y + dy[i]; 
            if (border(inou, jnou) && a[inou][jnou] == 0)
            {
                a[inou][jnou] = a[x][y] + 1; 
                coada.push(make_pair(inou, jnou));
            } 
            else if (a[inou][jnou] == a[x][y] + 1)
            {
                if (a[inou][jnou] < tmin)
                {
                    tmin = a[inou][jnou];
                    pozi = inou; 
                    pozj = jnou;
                }
            }
        }
    }
}
int main()
{
    fin >> n >> m;
    for (int i = 0; i <= n; i++)
      fin.getline(c[i], 101); 
    for(int i = 1; i <= n; i++) 
        for (int j = 0; j < m; j++)
        {
            if (c[i][j] == 'X')
              a[i][j + 1] = -1; 
            else if (c[i][j] == 'R')
            {
                iR = i; 
                jR = j + 1; 
                a[i][j + 1] = 1;
            } 
            else if (c[i][j] == 'J')
            {
                iJ = i; 
                jJ = j + 1; 
                a[i][j + 1] = 1;
            }
        }  
    coada.push(make_pair(iR, jR)); 
    coada.push(make_pair(iJ, jJ)); 
    Lee(); 
    fout << tmin << " " << pozi << " " << pozj;
    
}