Cod sursa(job #2950182)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 3 decembrie 2022 11:12:57
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <fstream>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m;

int v[105][105];
int m1[105][105];
int m2[105][105];
char x[105];

int dx[]={1,1,1,-1,-1,-1,0,0};
int dy[]={-1,0,1,1,-1,0,1,-1};
struct poz{
int x;
int y;}ju,r;

queue <poz> q;

int minim = INT_MAX;
poz minpoz;

int main()
{
    fin>>n>>m;
    fin.getline(x+1,105);
    for(int i=1;i<=n;i++)
    {
        fin.getline(x+1,105);
        for(int j=1;j<=m;j++)
        {
            if(x[j]==' ')
            {
                v[i][j]=1;
            }
            else if (x[j]=='X')
                v[i][j]=0;
            else if (x[j]=='R')
            {
                v[i][j]=1;
                r.x=i;
                r.y=j;
                m1[i][j]=1;
            }
            else if (x[j]=='J')
            {
                v[i][j]=1;
                ju.x=i;
                ju.y=j;
                m2[i][j]=1;
            }
        }
    }
    q.push(r);
    while(!q.empty())
    {
        for(int d=0;d<=7;d++)
        {
            int l = dx[d] + q.front().x;
            int c = dy[d] + q.front().y;
            if(v[l][c] && !m1[l][c])
            {
                m1[l][c]=m1[q.front().x][q.front().y]+1;
                q.push({l,c});
            }
        }
        q.pop();
    }
    /**
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            fout<<m1[i][j]<<' ';
        }
        fout<<'\n';
    }**/

    q.push(ju);
    while(!q.empty())
    {
        for(int d=0;d<=7;d++)
        {
            int l = dx[d] + q.front().x;
            int c = dy[d] + q.front().y;
            if(v[l][c] && !m2[l][c])
            {
                m2[l][c]=m2[q.front().x][q.front().y]+1;
                q.push({l,c});
            }
        }
        q.pop();
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(m1[i][j]==m2[i][j] && m1[i][j]<minim && m1[i][j])
            {
                minim=m1[i][j];
                minpoz={i,j};
            }
        }

    }
    fout<<minim<<' '<<minpoz.x<<' '<<minpoz.y;
}