Cod sursa(job #2698235)

Utilizator sebastiannrxRichiteanu Mihai Sebastian sebastiannrx Data 21 ianuarie 2021 15:35:23
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.71 kb
#include <fstream>
#include <queue>
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

#define nm_max 100

int n,m,rx,ry,jx,jy;
int mr[nm_max][nm_max],mj[nm_max][nm_max];

queue<int>qx,qy;

void read()
{
    f>>n>>m;
    char c;
  //  f.get();
    for (int i=1;i<=n;++i)
    {
        for (int j=1;j<=m;++j)
        {
            f.get(c);
            if (c == 'R')
            {
                rx = i;
                ry = j;
            }
            else if (c == 'J')
            {
                jx = i;
                jy = j;
            }
            else if (c == 'X')
            {
                mr[i][j] = mj[i][j] = -1;
            }
        }
        f.get();
    }
}

void lee(int ix, int iy,int a[nm_max][nm_max])
{
    a[ix][iy] = 1;
    qx.push(ix);
    qy.push(iy);
    while (!qx.empty())
    {
        ix = qx.front();
        iy = qy.front();
        if (ix-1>0 && a[ix-1][iy] == 0)
        {
            qx.push(ix-1);
            qy.push(iy);
            a[ix-1][iy] = a[ix][iy]+1;
        }
        if (ix-1>0 && iy-1>0  && a[ix-1][iy-1] == 0)
        {
            qx.push(ix-1);
            qy.push(iy-1);
            a[ix-1][iy-1] = a[ix][iy]+1;
        }
        if (ix-1>0 && iy+1<=m && a[ix-1][iy+1] == 0)
        {
            qx.push(ix-1);
            qy.push(iy+1);
            a[ix-1][iy+1] = a[ix][iy]+1;
        }
        if (iy-1>0 && a[ix][iy-1] == 0)
        {
            qx.push(ix);
            qy.push(iy-1);
            a[ix][iy-1] = a[ix][iy]+1;
        }
        if (iy+1<=m && a[ix][iy+1] == 0)
        {
            qx.push(ix);
            qy.push(iy+1);
            a[ix][iy+1] = a[ix][iy]+1;
        }
        if (ix+1<=n && iy-1>0 && a[ix+1][iy-1] == 0)
        {
            qx.push(ix+1);
            qy.push(iy-1);
            a[ix+1][iy-1] = a[ix][iy]+1;
        }
        if (ix+1<=n && a[ix+1][iy] == 0)
        {
            qx.push(ix+1);
            qy.push(iy);
            a[ix+1][iy] = a[ix][iy]+1;
        }
        if (ix+1<=n && iy+1<=m  && a[ix+1][iy+1] == 0)
        {
            qx.push(ix+1);
            qy.push(iy+1);
            a[ix+1][iy+1] = a[ix][iy]+1;
        }
        qx.pop();
        qy.pop();

    }
}

void out ()
{
    int mi = 999999999;
    int mix = 0, miy = 0;
    for (int i=1;i<=n;++i)
        for (int j=1;j<=m;++j)
            if (mr[i][j] == mj[i][j] && mr[i][j]<mi && mr[i][j] > 0)
            {
                mi = mr[i][j];
                mix = i;
                miy = j;
            }
    g<<mi<<" "<<mix<<" "<<miy<<'\n';
}

int main()
{
    read();
    lee(rx,ry,mr);
    lee(jx,jy,mj);
    out();



    return 0;
}