Cod sursa(job #2475545)

Utilizator valentin12Valentin Ion Semen valentin12 Data 17 octombrie 2019 08:43:03
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.76 kb
#include <fstream>

#include <string.h>

#include <queue>



using namespace std;

ifstream f("rj.in");

ofstream g("rj.out");

char s[256];

long a[101][101],i,j,n,m,pozx,pozy,xj,yj,xr,yr,minn,matr[101][101],matj[101][101];

const int dirx[]= {-1,1,0,0,1,-1};

const int diry[]= {0,0,1,-1,-1,1};



bool OKR(int i,int j)

{

    if(i<1||j<1||i>n||j>n) return false;

    if(matr[i][j]==-1) return false;

    return true;



}



bool OKJ(int i,int j)

{

    if(i<1||j<1||i>n||j>n) return false;

    if(matj[i][j]==-1) return false;

    return true;



}



void leeR(int is, int js)

{queue < pair <int,int> > coada;



    int i,j;

    matr[is][js]=1;

    coada.push(make_pair(is,js));





    int iurm,jurm,directie;

    while(!coada.empty())

    {

        i=coada.front().first;

        j=coada.front().second;

        coada.pop();

        for(directie=0; directie<8; directie++)

        {

            iurm=i+dirx[directie];

            jurm=j+diry[directie];



            if(OKR(iurm,jurm)&&matr[iurm][jurm]<1)

            {

                matr[iurm][jurm]=matr[i][j]+1;

                coada.push(make_pair(iurm,jurm));



            }

        }

    }





}



void leeJ(int is, int js)

{queue < pair <int,int> > coada;



    int i,j;

    matj[is][js]=1;

    coada.push(make_pair(is,js));





    int iurm,jurm,directie;

    while(!coada.empty())

    {

        i=coada.front().first;

        j=coada.front().second;

        coada.pop();

        for(directie=0; directie<8; directie++)

        {

            iurm=i+dirx[directie];

            jurm=j+diry[directie];



            if(OKJ(iurm,jurm)&&matj[iurm][jurm]<1)

            {

                matj[iurm][jurm]=matj[i][j]+1;

                coada.push(make_pair(iurm,jurm));



            }

        }

    }





}



int main()

{

    f>>n>>m;minn=100000;

    f.get();

    for(i=1; i<=n; i++)

    {

        f.getline(s,256);

        for(j=0; j<m; j++)

            if(s[j]=='X') {matr[i][j+1]=-1;matj[i][j+1]=-1;}

            else if(s[j]==' ') {matr[i][j+1]=0;matj[i][j+1]=0;}

            else if(s[j]=='R') {xr=i;yr=j+1;}

            else if(s[j]=='J') {xj=i;yj=j+1;}

    }



   leeR(xr,yr);

   leeJ(xj,yj);

   for(i=1;i<=n;i++)

   for(j=1;j<=m;j++)

   if(matr[i][j]==matj[i][j]&&matr[i][j]>0&&matj[i][j]>0) if(matr[i][j]<minn) {minn=matr[i][j];

                                                   pozx=i;

                                                   pozy=j;

                                                  }



 g<<minn-1<<" "<<pozx<<" "<<pozy;

    return 0;

}