Cod sursa(job #2407135)

Utilizator mihailrazMihail Turcan mihailraz Data 16 aprilie 2019 15:52:35
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
#include <cstring>
#include <queue>

using namespace std;
ifstream fi("rj.in");
ofstream fo("rj.out");
const int nmax=100, mmax=100;
int n, m, lrstart, crstart, ljstart, cjstart, mini=2e9, lf, cf;
int dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, dc[]={0, 1, 1, 1, 0, -1, -1, -1};
int R[nmax+5][mmax+5], J[nmax+5][mmax+5];
queue <pair <int, int> > Q;

bool inMatrice(int l, int c)
{
    if(l>=1 && l<=n && c>=1 && c<=m)
        return 1;
    return 0;
}

void lee(int A[][mmax+5])
{
    while(!Q.empty())
    {
        int lin=Q.front().first;
        int col=Q.front().second;
        Q.pop();
        for(int d=0; d<8; d++)
        {
            int lnou=lin+dl[d];
            int cnou=col+dc[d];
            if(A[lnou][cnou]==0 && inMatrice(lnou, cnou))
            {
                A[lnou][cnou]=A[lin][col]+1;
                Q.push({lnou, cnou});
            }
        }
    }
}

int main()
{
    fi>>n>>m;
    for(int i=1;i<=n;i++)
    {
        char c;
        fi.get(c);
        for(int j=1;j<=m;j++)
        {
            fi.get(c);
            switch(c)
            {
                case 'X': R[i][j]=J[i][j]=-1; break;
                case 'R': lrstart=i,crstart=j; R[i][j]=1; break;
                case 'J': ljstart=i,cjstart=j; J[i][j]=1; break;
                default: R[i][j]=J[i][j]=0;
            }
        }
    }

    Q.push({lrstart, crstart});
    lee(R);
    Q.push({ljstart, cjstart});
    lee(J);

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(R[i][j]==J[i][j] && R[i][j]<mini && R[i][j]>0)
            {
                mini=R[i][j];
                lf=i;
                cf=j;
            }
        }
    }

    fo<<lf<<" "<<cf<<" "<<mini;

    fi.close();
    fo.close();
    return 0;
}