Cod sursa(job #2504888)

Utilizator Simon2712Simon Slanina Simon2712 Data 5 decembrie 2019 18:33:23
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <fstream>
#include <cstdio>
using namespace std;
ofstream cout("rj.out");
char a[102][102];
int ro[101][101],ju[101][101];
struct ura{
  int x,y;
};
ura coada[10];
short int dir1[]={-1,-1,0,1,1,1,0,-1};
short int dir2[]={0,1,1,1,0,-1,-1,-1};
int main()
{
    freopen("rj.in","r",stdin);
    int n,m,xx,yy,i,j,inc,sf,xr,yr,xj,yj,mini=-1,minx,miny;
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=n;i++){
      for(j=1;j<=m;j++)
      {
        a[i][j]=getchar();
        if(a[i][j]=='\n')
        {
          while(j<=m)
          {
            a[i][j]=' ';
            j++;
          }
          j=m+5;
        }
        if(a[i][j]=='R')
        {
          xr=i;
          yr=j;
        }
        else
        if(a[i][j]=='J')
        {
          xj=i;
          yj=j;
        }
      }
      if(j<m+5)
        getchar();
    }
    for(i=0;i<=n+1;i++)
      a[i][0]=a[i][m+1]='X';
    for(j=0;j<=m+1;j++)
      a[0][j]=a[n+1][j]='X';
    inc=sf=1;
    coada[inc].x=xr;
    coada[inc].y=yr;
    while(inc<=sf)
    {
      xx=coada[inc].x;
      yy=coada[inc].y;
      for(i=0;i<8;i++)
      {
        if(a[xx+dir1[i]][yy+dir2[i]]==' ')
          if(ro[xx][yy]+1<ro[xx+dir1[i]][yy+dir2[i]] || ro[xx+dir1[i]][yy+dir2[i]]==0)
          {
            ro[xx+dir1[i]][yy+dir2[i]]=ro[xx][yy]+1;
            sf++;
            coada[sf].x=xx+dir1[i];
            coada[sf].y=yy+dir2[i];
          }
      }
      inc++;
    }
    inc=sf=1;
    coada[inc].x=xj;
    coada[inc].y=yj;
    while(inc<=sf)
    {
      xx=coada[inc].x;
      yy=coada[inc].y;
      for(i=0;i<8;i++)
      {
        if(a[xx+dir1[i]][yy+dir2[i]]==' ')
          if(ju[xx][yy]+1<ju[xx+dir1[i]][yy+dir2[i]] ||ju[xx+dir1[i]][yy+dir2[i]]==0)
          {
            ju[xx+dir1[i]][yy+dir2[i]]=ju[xx][yy]+1;
            sf++;
            coada[sf].x=xx+dir1[i];
            coada[sf].y=yy+dir2[i];
          }
      }
      inc++;
    }
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
      if(ro[i][j]==ju[i][j] && ro[i][j]!=0 && (ro[i][j]<mini || mini==-1))
      {
        mini=ro[i][j];
        minx=i;
        miny=j;
      }
    }
    cout<<mini+1<<" "<<minx<<" "<<miny;
    return 0;
}