Cod sursa(job #2770145)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 19 august 2021 16:46:41
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

ofstream fout("rj.out");

queue <pair<int, int> >Q;

int n, m, a[105][105], b[105][105];
int xr, yr, xj, yj, xfinal, yfinal;

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

char c, cit[305];

void citire()
{
    FILE *f=fopen("rj.in", "r");
    fscanf(f, "%d %d\n", &n, &m);
    for(int i=1; i<=n; i++)
    {
        fgets(cit+1, 305, f);
        for(int j=1; j<=m; j++)
        {
            if(cit[j]==' ')
                a[i][j]=0;
            else if(cit[j]=='X')
                a[i][j]=-1;
            else if(cit[j]=='R')
            {
                xr=i;
                yr=j;
                a[i][j]=0;
            }
            else if(cit[j]=='J')
            {
                xj=i;
                yj=j;
                a[i][j]=0;
            }
        }
    }
    /**for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            fout<<a[i][j]<<" ";
        fout<<"\n";
    }**/

    for(int i=0; i<=n+1; i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    for(int j=0; j<=m+1; j++)
    {
        a[0][j]=-1;
        a[n+1][j]=-1;
    }
    for(int i=0; i<=n+1; i++)
        for(int j=0; j<=m+1; j++)
            b[i][j]=a[i][j];
}

void lee(int xi, int yi, int x[105][105])
{
    Q.push({xi, yi});
    x[xi][yi]=1;
    while(!Q.empty())
    {
        int i=Q.front().first, j=Q.front().second;
        Q.pop();
        for(int v=0; v<8; v++)
        {
            int ifinal=i+dx[v];
            int jfinal=j+dy[v];
            if(x[ifinal][jfinal]==0)
            {
                x[ifinal][jfinal]=x[i][j]+1;
                Q.push({ifinal, jfinal});
            }
        }
    }
}

void verif()
{
    int tmin=n*m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<tmin)
            {
                tmin=a[i][j];
                xfinal=i;
                yfinal=j;
            }
    fout<<tmin<<" "<<xfinal<<" "<<yfinal;
}

int main()
{
    citire();
    lee(xj, yj, a);
    /**for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            fout<<a[i][j]<<" ";
        fout<<"\n";
    }**/
    lee(xr, yr, b);
    verif();
    return 0;
}