Cod sursa(job #3161093)

Utilizator cosmin395dimofte cosmin cosmin395 Data 25 octombrie 2023 19:20:37
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.55 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct lee
{
    int i, j;
};
queue <lee> l;
struct oras
{
    int r, j;
};
oras v[102][102];
int i, j, n, m, iR, jR, jJ, jj, iJ, d, ii, pmin, afj, afi;
int dj[8] = { 0 ,0 ,1 ,1 ,-1,-1, 1,-1 };
int di[8] = { -1,1 ,-1, 1,-1, 1, 0, 0 };
char x[102];
int main()
{
    cin >> n >> m;
    cin.get();
    for (i = 1; i <= n; i++)
    {
        cin.getline(x, 102);
        for (j = 0; j < m; j++)
        {
            //cout <<'(' << x[j] << ')';
            if (x[j] == 'X')
            {
                v[i][j].j = 0;
                v[i][j].r = 0;
            }
            else if (x[j] == 'R')
            {
                v[i][j].r = 1;
                iR = i;
                jR = j;
            }
            else if (x[j] == 'J')
            {
                v[i][j].j = 1;
                iJ = i;
                jJ = j;
            }
            else
            {
                v[i][j].r = -1;
                v[i][j].j = -1;
            }
        }

    }



    l.push({ iR,jR });
    while (!l.empty())
    {
        i = l.front().i;
        j = l.front().j;
        for (d = 0; d < 8; d++)
        {
            ii = i + di[d];
            jj = j + dj[d];
            if (v[ii][jj].r == -1)
            {
                v[ii][jj].r = v[i][j].r + 1;
                l.push({ ii,jj });
            }

        }
        l.pop();
    }
    l.push({ iJ,jJ });
    while (!l.empty())
    {
        i = l.front().i;
        j = l.front().j;
        for (d = 0; d < 8; d++)
        {
            ii = i + di[d];
            jj = j + dj[d];
            if (v[ii][jj].j == -1)
            {
                v[ii][jj].j = v[i][j].j + 1;
                l.push({ ii,jj });
            }
        }
        l.pop();
    }
    pmin = 1000000000;
    for (i = 1; i <= n; i++)
        for (j = 0; j < m; j++)
            if (v[i][j].r == v[i][j].j && v[i][j].r < pmin && v[i][j].r >= 1)
            {
                pmin = v[i][j].r;
                afi = i;
                afj = j + 1;
            }



    cout << pmin << ' ' << afi << ' ' << afj << endl;
    /* for (i = 1; i <= n; i++)
     {
         for (j = 0; j < m; j++)
             cout << v[i][j].r << ' ';
         cout << endl;
     }

         for (i = 1; i <= n; i++)
         {
             for (j = 0; j < m; j++)
                 cout << v[i][j].j << ' ';
             cout << endl;
         }*/

    return 0;
}