Cod sursa(job #2244759)

Utilizator stefanut999Paul Colta stefanut999 Data 23 septembrie 2018 16:50:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,xj,yj,xr,u,yr,R[101][101],J[101][101];
int dlin[9]={0, 1, 1, 1, 0, -1, -1, -1 };
int dcol[9]={1, 1, 0, -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,100);
     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;
     }}
}

}
 int 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<9; 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;
     }
   }


  }
return R[xj][yj];
}

 int LEEJ()
{ COORD s;
  int p,i,xn,yn;
  p=u=1;
  cj[1].x=xj;
  cj[1].y=yj;
  J[xr][yr]=1;
  while(p<=u && !J[xr][yr])
  {s=cj[p++];
   for(i=0; i<9; 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]=1+J[s.x][s.y];
        cj[++u].x=xn;
        cj[u].y=yn;
     }
   }


  }
return J[xr][yr];
}



int main()
{citire();
 int XF,YF,i,j, dmin=10002;
 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;
}