Cod sursa(job #2596637)

Utilizator matei123Biciusca Matei matei123 Data 10 aprilie 2020 08:14:32
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,xj,yj,xr,u,yr,R[102][102],J[102][102];
int dlin[9]={-1, -1, -1, 0, 0, 1, 1, 1};
int dcol[9]={-1, 0, 1, -1, 1, -1, 0, 1};
typedef struct {int x,y;}COORD;
COORD cr[10001],cj[10001];
void citire()
{   int j,i;
    char l[101];
    fin>>n>>m;
    fin.getline(l,100);
    for(i=0; i<n; i++)
    {   fin.getline(l,101);
        for(j=0; j<m; j++)
        {   if(l[j] == 'X') R[i][j]=J[i][j] = -1;
            if(l[j] == 'J')
            {   xj=i; yj=j;}
            if(l[j] == 'R')
            {   xr=i; yr=j;}
        }
    }
}
void LEER( )
{   COORD s;
    int p,i,xn,yn;
    p=u=1;
    cr[1].x=xr;
    cr[1].y=yr;
    R[xr][yr]=1;
    while(p<=u && !R[xj][yj])
    {   s=cr[p++];
        for(i=0; i<8; i++)
        {   xn=s.x+dlin[i];
            yn=s.y+dcol[i];
            if(!R[xn][yn] && xn<n && xn>=0 && yn<m && yn>=0)
            {   R[xn][yn]=1+R[s.x][s.y];
                cr[++u].x=xn;
                cr[u].y=yn;
            }
        }
    }
}
void LEEJ()
{   COORD s;
    int p,i,xn,yn;
    p=u=1;
    cj[1].x=xj;
    cj[1].y=yj;
    J[xj][yj]=1;
    while(p<=u && !J[xr][yr])
    {   s=cj[p++];
        for(i=0; i<8; i++)
        {   xn=s.x+dlin[i];
            yn=s.y+dcol[i];
            if(!J[xn][yn] && xn<n && xn>=0 && yn<m && yn>=0)
            {   J[xn][yn]=J[s.x][s.y]+1;
                cj[++u].x=xn;
                cj[u].y=yn;
            }
        }
    }
}
int main()
{   citire();
    int XF,YF,i,j, dmin=2000000;
    LEER();
    LEEJ();
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
        {   if(R[i][j]>0 && R[i][j] == J[i][j] && R[i][j]<dmin)
            {   dmin=R[i][j];
                XF=i;
                YF=j;
            }
        }
    fout<<dmin<<' '<<XF+1<<' '<<YF+1;
    return 0;
}