Cod sursa(job #3185290)

Utilizator IustaganIusin Dabu Iustagan Data 18 decembrie 2023 17:45:33
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <fstream>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct crd{int x,y;}vecinr,vecinj,r,juliet,q[10002],q1[10002];
int v[102][102];

const int dl[]={-1,-1,-1,0,1,1,1,0};
const int dc[]={-1,0,1,1,1,0,-1,-1};
int incr=0,sfr=0;
int incj=0,sfj=0;


void LEE(int v[][102],crd pcrtr,crd pcrtj,crd vecinr,crd vecinj,crd q[],crd q1[],crd r,crd juliet)
{
     q[0]=r;
     q1[0]=juliet;
     int cnt=0;

     v[pcrtr.x][pcrtr.y]=1;
     v[pcrtj.x][pcrtj.y]=1;

     while((incr<=sfr||incj<=sfj)&&cnt==0)
     {
          pcrtr=q[incr++];
          pcrtj=q1[incj++];
          for(int i=0;i<8&&cnt==0;i++)
          {
               vecinr.x=pcrtr.x+dl[i];
               vecinr.y=pcrtr.y+dc[i];
               vecinj.x=pcrtj.x+dl[i];
               vecinj.y=pcrtj.y+dc[i];

               if(v[vecinr.x][vecinr.y]==0||v[vecinr.x][vecinr.y]==v[pcrtr.x][pcrtr.y]+1)
               {
                    if(v[vecinr.x][vecinr.y]==0)
                    {
                         v[vecinr.x][vecinr.y]=v[pcrtr.x][pcrtr.y]+1;
                         q[++sfr]=vecinr;
                    }

                    else
                    {
                         cnt=1;
                         q[++sfr]=vecinr;
                         q1[++sfj]=vecinr;
                    }
               }

               if(v[vecinj.x][vecinj.y]==0||v[vecinj.x][vecinj.y]==v[pcrtj.x][pcrtj.y]+1)
               {
                    if(v[vecinj.x][vecinj.y]==0)
                    {
                         v[vecinj.x][vecinj.y]=v[pcrtj.x][pcrtj.y]+1;
                         q1[++sfj]=vecinj;
                    }

                    else
                    {
                         cnt=1;
                         q1[++sfj]=vecinj;
                         q[++sfr]=vecinj;
                    }
               }
          }
     }
}

int main()
{
     int n,m;
     string d;
     cin>>n>>m;
     cin.get();
     for(int i=1;i<=n;i++)
     {
          getline(cin,d);

          for(int j=0;j<m;j++)
          if(d[j]=='R')
          {
               r.x=i;
               r.y=j+1;
          }
          else if(d[j]=='J')
          {
               juliet.x=i;
               juliet.y=j+1;
          }
          else if(d[j]=='X')
               v[i][j+1]=-1;
     }

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

     LEE(v,r,juliet,vecinr,vecinj,q,q1,r,juliet);
     cout<<v[q[sfr].x][q[sfr].y]<<' '<<q[sfr].x<<' '<<q[sfr].y;
}