Cod sursa(job #3289557)

Utilizator Danut2011PopaDanSebastian Danut2011 Data 27 martie 2025 13:32:35
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int lin[8]= {-1,-1,0,1,1, 1, 0,-1};
int col[8]= { 0, 1,1,1,0,-1,-1,-1};
///         N, NE,E,SE,S,SV,V,NV
int R[101][101],J[101][101],Rc,Rl,Jc,Jl,n,m,i,j,tmin,imin,jmin;
char c;
queue<pair<int,int> > q;
pair<int,int> aux;
int main()
{
    fin>>n>>m;
    for (i=1; i<=n; i++)
    {
        fin.get(c);
        for (j=1; j<=m; j++)
        {
            fin.get(c);
            if (c=='X')
            {
                R[i][j]=-1;
                J[i][j]=-1;
            }
            else if (c=='R')
            {
                Rc=j;
                Rl=i;
                R[i][j]=1;
            }
            else if (c=='J')
            {
                Jc=j;
                Jl=i;
                J[i][j]=1;
            }
        }
    }
    for (i=0; i<=n+1; i++)
    {
        R[i][0]=-1;
        R[i][m+1]=-1;
        J[i][0]=-1;
        J[i][m+1]=-1;
    }
    for (j=0; j<=m+1; j++)
    {
        R[0][j]=-1;
        R[n+1][j]=-1;
        J[0][j]=-1;
        J[n+1][j]=-1;
    }
    q.push(make_pair(Rl,Rc));
    while (!q.empty())
    {
        aux=q.front();
        for (int dir=0; dir<8; dir++)
        {
            i=aux.first+lin[dir];
            j=aux.second+col[dir];
            if (R[i][j]==0)
            {
                R[i][j]=R[aux.first][aux.second]+1;
                q.push(make_pair(i,j));
            }
        }
        q.pop();
    }
    q.push(make_pair(Jl,Jc));
    while (!q.empty())
    {
        aux=q.front();
        for (int dir=0; dir<8; dir++)
        {
            i=aux.first+lin[dir];
            j=aux.second+col[dir];
            if (J[i][j]==0)
            {
                J[i][j]=J[aux.first][aux.second]+1;
                q.push(make_pair(i,j));
            }
        }
        q.pop();
    }
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            if (R[i][j]==J[i][j] && R[i][j]>0)
            {
                if (tmin==0 || R[i][j]<tmin)
                {
                    tmin=R[i][j];
                    imin=i;
                    jmin=j;
                }
            }
        }
    }
    fout<<tmin<<" "<<imin<<" "<<jmin;
    return 0;
}