Cod sursa(job #2473831)

Utilizator valentin12Valentin Ion Semen valentin12 Data 14 octombrie 2019 12:58:41
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.51 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=INT_MAX;
    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]) if(matr[i][j]<minn) {minn=matr[i][j];
                                                   pozx=i;
                                                   pozy=j;
                                                  }

 g<<minn<<" "<<pozx<<" "<<pozy;
    return 0;
}