Cod sursa(job #2133366)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 16 februarie 2018 20:46:44
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <fstream>
#include <queue>
int dl[4]={-1,0,1,0};
int dc[4]={0,1,0,-1};
using namespace std;
ifstream fi("rj.in");
ofstream fo("rj.out");
char A[101][101];
int R[101][101],J[101][101],n,m,rt,ri,rj;
pair <int,int> ro;
pair <int,int> ju;
queue <pair <int,int> > Q;
int main()
{
    fi>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            fi>>A[i][j];
            if(A[i][j]=='R')
                ro={i,j};
            if(A[i][j]=='J')
                ju={i,j};
        }
    Q.push(ro);
    while (!Q.empty())
    {
        pair <int, int> aux;
        aux=Q.front();
        Q.pop();
        for (int d=0;d<=3;d++)
        {
            int lnou,cnou;
            lnou=aux.first+dl[d];
            cnou=aux.second+dc[d];
            if (lnou>=1 && lnou<=n && cnou>=1 && cnou<=m)
                if(R[lnou][cnou]!=0)
                    if(A[lnou][cnou]!='X')
                    {
                        R[lnou][cnou]=R[aux.first][aux.second]+1;
                        Q.push({lnou,cnou});
                    }
        }
    }
    Q.push(ju);
    while (!Q.empty())
    {
        pair <int, int> aux;
        aux=Q.front();
        Q.pop();
        for (int d=0;d<=3;d++)
        {
            int lnou,cnou;
            lnou=aux.first+dl[d];
            cnou=aux.second+dc[d];
            if (lnou>=1 && lnou<=n && cnou>=1 && cnou<=m)
                if(J[lnou][cnou]!=0)
                    if(A[lnou][cnou]!='X')
                    {
                        J[lnou][cnou]=J[aux.first][aux.second]+1;
                        Q.push({lnou,cnou});
                    }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(R[i][j]==J[i][j])
                if(R[i][j]<rt)
            {
                rt=R[i][j];
                ri=i;
                rj=j;
            }
        }
    }
    fo<<rt<<" "<<ri<<" "<<rj;
    fi.close();
    fo.close();
    return 0;
}