Cod sursa(job #2486353)

Utilizator Florinos123Gaina Florin Florinos123 Data 2 noiembrie 2019 18:51:17
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3 kb
#include <iostream>
#include <queue>
#include <cstring>
#include <fstream>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

queue < pair < int, int > > coada;
int romeo[105][105],julieta[105][105],i,j,n,m,poziromeo,pozjromeo,pozijulieta,pozjjulieta;
char c[110];
int di[8]= {-1,-1,0,1,1,1,0,-1};
int dj[8]= {0,1,1,1,0,-1,-1,-1};

bool okromeo(int i, int j)
{
    if(i<1 || j<1 || j>m || i>n)
        return false;
    if(romeo[i][j]==-1)
        return false;
    return true;
}

bool okjulieta(int i, int j)
{
    if(i<1 || j<1 || j>m || i>n)
        return false;
    if(julieta[i][j]==-1)
        return false;
    return true;
}

void leejulieta()
{
    int distanta,i_nou,j_nou;
    julieta[pozijulieta][pozjjulieta]=1;
    coada.push(make_pair(pozijulieta,pozjjulieta));
    while(coada.empty()==0)
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(distanta=0;distanta<8;distanta++)
        {
            i_nou=i+di[distanta];
            j_nou=j+dj[distanta];
            if(okjulieta(i_nou,j_nou)==1)
            {
                if(julieta[i_nou][j_nou]==0)
                {
                julieta[i_nou][j_nou]=julieta[i][j]+1;
                coada.push(make_pair(i_nou,j_nou));
                }
            }
        }
    }
}

void leeromeo()
{
    int distanta,i_nou,j_nou;
    romeo[poziromeo][pozjromeo]=1;
    coada.push(make_pair(poziromeo,pozjromeo));
    while(coada.empty()==0)
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(distanta=0;distanta<8;distanta++)
        {
            i_nou=i+di[distanta];
            j_nou=j+dj[distanta];
            if(okromeo(i_nou,j_nou)==1)
            {
                if(romeo[i_nou][j_nou]==0)
                {
                romeo[i_nou][j_nou]=romeo[i][j]+1;
                coada.push(make_pair(i_nou,j_nou));
                }
            }
        }
    }
}

int main()
{
    f>>n>>m;
    f.get();
for(i=1;i<=n;i++)
{
    f.getline(c,110);
    j=1;
    for(int p=0;p<strlen(c);p++)
    {
        if(c[p]=='X')
        {
            romeo[i][j]=-1;
            julieta[i][j]=-1;
        }
        if(c[p]==' ')
        {
            romeo[i][j]=0;
            julieta[i][j]=0;
        }
        if(c[p]=='R')
        {
            julieta[i][j]=-1;
            poziromeo=i;
            pozjromeo=j;
        }
        if(c[p]=='J')
        {
            romeo[i][j]=-1;
            pozijulieta=i;
            pozjjulieta=j;
        }
        j++;
    }
}
leeromeo();
leejulieta();
int minim=99999,poz1,poz2;
for(i=1;i<=n;i++)
{
    for(j=1;j<=m;j++)
    {
        if(romeo[i][j]==julieta[i][j])
            if(romeo[i][j]>0 && julieta[i][j]>0)
           if(romeo[i][j]<minim)
        {
              minim=julieta[i][j];
             poz1=i;
             poz2=j;
        }
    }
}
g<<minim<<" "<<poz1<<" "<<poz2;

    return 0;
}