Cod sursa(job #2832388)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 13 ianuarie 2022 16:15:08
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int nrl,nrc,linr,colr,linj,colj;

int dl[8]={0,1,0,-1,-1,1,-1,1};
int dc[8]={1,0,-1,0,-1,1,1,-1};
const int NMAX=102;

queue<pair<int, int>> q;
char a[NMAX][NMAX];
int matr[NMAX][NMAX];
int matj[NMAX][NMAX];

void citire()
{
    char c[NMAX];
    fin>>nrl>>nrc;
    for (int i=0;i<=nrl+1;i++)
        a[i][0]=a[i][nrc+1] = 'X';
    for (int i=0;i<=nrc+1;i++)
        a[0][i]=a[nrl+1][i]='X';
    fin.get();
    for (int i=1;i<=nrl;i++)
    {
        fin.get(c,NMAX);
        for (int j=1;j<=nrc;j++)
        {
            a[i][j]=c[j - 1];
            if (a[i][j]=='R')
            {
                linr=i;
                colr=j;
                a[i][j]=' ';
            }
            if (a[i][j]=='J')
            {
                linj=i;
                colj=j;
                a[i][j]= ' ';
            }
        }
        fin.get();
    }
}

void lee(int lin0, int col0, int matrice[NMAX][NMAX])
{
    int i,j,x,y;
    for(i=0;i<=nrl+1;i++)
        for(j=0;j<=nrc+1;j++)
            matrice[i][j]=0;
    matrice[lin0][col0]=1;
    q.push(make_pair(lin0,col0));
    matrice[lin0][col0]=1;
    while(!q.empty())
    {
        x=q.front().first;
        y=q.front().second;
        q.pop();
        for(i=0;i<8;i++)
            if(a[x+dl[i]][y+dc[i]]==' ' && matrice[x+dl[i]][y+dc[i]]==0)
            {
                matrice[x+dl[i]][y+dc[i]]=1+matrice[x][y];
                q.push(make_pair(x+dl[i],y+dc[i]));
            }
    }
}

void afisare()
{
    int i,j,xmin=-1,ymin=-1,tmin;
    tmin = NMAX * NMAX;
    for(i=1;i<=nrl;i++)
        for(j=1;j<=nrc;j++)
            if(matr[i][j]==matj[i][j])
                if(matr[i][j]<tmin && matr[i][j]!= 0)
                {
                    tmin=matr[i][j];
                    xmin=i;
                    ymin=j;
                }
    fout<<tmin<<" "<<xmin<<" "<<ymin;
}

int main()
{
    citire();
    lee(linr,colr,matr);
    lee(linj,colj,matj);
    afisare();
    return 0;
}