Cod sursa(job #3151233)

Utilizator Laura139Anghel Laura Laura139 Data 20 septembrie 2023 11:34:44
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream cin("rj.in");
ofstream cout("rj.out");

struct coord
{
    int x,y;
};

int drumRomeo[105][105],drumJulieta[105][105];
int n,m;

queue <coord> q;
int poz[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};

bool EInMat(coord k)
{
    return k.x<=n && k.x>=1 && k.y<=m && k.y>=1;
}

void Lee(int mat[105][105], coord inc)
{
    mat[inc.x][inc.y]=1;
    q.push(inc);
    while(!q.empty())
    {
        coord posc=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            coord pos;
            pos.x=posc.x+poz[i][0];
            pos.y=posc.y+poz[i][1];
            if(EInMat(pos) && mat[pos.x][pos.y]==0)
            {
                q.push(pos);
                mat[pos.x][pos.y]=mat[posc.x][posc.y]+1;
            }
        }
    }
}

int main()
{
    cin>>n>>m;
    coord Romeo, Julieta;
    string s;
    getline(cin, s);
    for(int i=1;i<=n;i++)
    {
        getline(cin, s);
        for(int j=1;j<=m;j++)
        {
            char c=s[j-1];
            if(c=='X')
            {
                drumJulieta[i][j]=-1;
                drumRomeo[i][j]=-1;
            }
            if(c=='R')
            {
                Romeo.x=i;
                Romeo.y=j;
            }
            if(c=='J')
            {
                Julieta.x=i;
                Julieta.y=j;
            }
        }
    }

    Lee(drumJulieta, Julieta);
    Lee(drumRomeo, Romeo);

    int drumMinim=10001;
    coord pozDrumMinim;

    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(drumJulieta[i][j]==drumRomeo[i][j] && drumJulieta[i][j]<drumMinim && drumJulieta[i][j]>0)
            {
                drumMinim=drumJulieta[i][j];
                pozDrumMinim.x=i;
                pozDrumMinim.y=j;
            }
    cout<<drumMinim<<" "<<pozDrumMinim.x<<" "<<pozDrumMinim.y<<" ";
    return 0;
}