Cod sursa(job #3290357)

Utilizator Andrei_DumyDumitrescu Andrei-George Andrei_Dumy Data 30 martie 2025 14:51:31
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream>
#include <queue>

using namespace std;

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

struct node{
    int d, i, j;
};

int J[105][105], R[105][105], ji, jj, ri, rj;
int n, m;

void wM(int a[][105])
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            cout<<a[i][j]<<" ";
        cout<<"\n";
    }
}

void read(const int& n, const int& m)
{
    char penis;
    cin.get();
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cin.get(penis);
            if(penis==' ')
                R[i][j]=0, J[i][j]=0;
            else if(penis=='X')
                R[i][j]=-1, J[i][j]=-1;
            else if(penis=='J')
                ji=i, jj=j, J[i][j]=-1, R[i][j]=-1;
            else
                ri=i, rj=j, R[i][j]=-1, J[i][j]=-1;
        }   
        cin.get();
    }
    //wM(J);
}

bool inBounds(const int& i, const int& j)
{
    return i>=1 && i<=n && j>=1 && j<=m;
}

int dx[]={0, 0, 1, -1, 1, 1, -1, -1}, dy[]={1, -1, 0, 0, 1, -1, 1, -1};

void bruceLee(const int& sti, const int& stj, int a[][105])
{
    queue<node> Q;
    node marian;
    Q.push({1, sti, stj});
    int wc=0;

    while(!Q.empty())
    {
        marian=Q.front();
        Q.pop();
        for(int i=0; i<8; i++)
        {
            if(inBounds(marian.i+dx[i], marian.j+dy[i]))
                if(a[marian.i+dx[i]][marian.j+dy[i]]==0)
                {
                    a[marian.i+dx[i]][marian.j+dy[i]]=marian.d+1;
                    Q.push({marian.d+1, marian.i+dx[i], marian.j+dy[i]});
                }
        }
    }
    cout<<"\n";
    //wM(a);
}

int main()
{
    cin>>n>>m;
    read(n, m);
    bruceLee(ri, rj, R);
    bruceLee(ji, jj, J);
    
    node talent; talent.d=999999999;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(R[i][j]==J[i][j] && R[i][j]!=-1 && R[i][j]!=0)
            {
                if(R[i][j]<talent.d)
                    talent={R[i][j], i, j};
            }
        }
    }
    cout<<talent.d<<" "<<talent.i<<" "<<talent.j;
    return 0;
}