Cod sursa(job #2775613)

Utilizator Emilia23Dobra Emilia Emilia23 Data 16 septembrie 2021 15:40:23
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

int R[105][105], J[105][105],m,n,xr,yr,xj,yj,minn=10000,xmin,ymin;

void comparare()
{
    int i,j;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(R[i][j]==J[i][j] && R[i][j]>0)
                if(R[i][j]<minn)
                {
                    minn=R[i][j];
                    xmin=i;
                    ymin=j;
                }
}

void lee(int xi, int yi, int a[][105])
{
    int c[100005][2],dx[]= {0,-1,-1,0,1,1,1,0,-1}, dy[]= {0,0,-1,-1,-1,0,1,1,1}, x,y,xx,yy,p,u,i;
    p=u=1;
    c[1][0]=xi;
    c[1][1]=yi;
    a[xi][yi]=1;
    while(p<=u)
    {
        x=c[p][0];
        y=c[p][1];
        for(i=1; i<=8; i++)
        {
            xx=x+dx[i];
            yy=y+dy[i];
            if(a[xx][yy]==0 && xx<=n && xx>=1 && yy<=m && yy>=1)
            {
                a[xx][yy]=a[x][y]+1;
                u++;
                c[u][0]=xx;
                c[u][1]=yy;
            }
        }
        p++;
    }
}

void citire ()
{
    int i,j;
    char s[105];
    f>>n>>m;
    f.get();
    for(i=1; i<=n; i++)
    {
        f.getline(s, sizeof s);
        for(j=0; j<m; j++)
            if(s[j]=='X')
            {
                R[i][j+1]=-1;
                J[i][j+1]=-1;
            }
            else if(s[j]=='R')
            {
                xr=i;
                yr=j+1;
            }
            else if(s[j]=='J')
            {
                xj=i;
                yj=j+1;
            }
    }
}

int main()
{
    int i,j;
    citire();
    lee(xr,yr,R);
    lee(xj,yj,J);
    comparare();
    g<<minn<<' '<<xmin<<' '<<ymin;
    return 0;
}