Cod sursa(job #2667848)

Utilizator albertyoAlbert Mindrescu albertyo Data 3 noiembrie 2020 23:14:59
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.88 kb
#include <fstream>
#define N 105
#define NN 10005
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m,linR,colR,linJ,colJ,nrR[N][N],nrJ[N][N],answer,linfinal,colfinal;
char a[N][N];
int pr,ul,cx[NN],cy[NN];
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,1,-1,1,0,-1};

void Citire()
{ int i,j;
  char x;
  fin>>n>>m;
  fin.get();
  for(i=1;i<=n;i++)
      { for(j=1;j<=m;j++)
           { fin.get(x);
             a[i][j]=x;

             if(j==m)
               fin.get();
           }
      }
  for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
          if(a[i][j]=='R') {linR=i; colR=j;}
          else if(a[i][j]=='J') {linJ=i; colJ=j;}
          else if(a[i][j]=='X') {nrR[i][j]=-2; nrJ[i][j]=-2;}
}

void LeeR()
{ int i,j,cx_curent,cy_curent,cx_vecin,cy_vecin;
  pr=ul=1;
  cx[pr]=linR; cy[pr]=colR; nrR[linR][colR]=1; nrR[linJ][colJ]=-1;
  while(pr<=ul)
    { cx_curent=cx[pr];
      cy_curent=cy[pr];
      for(i=0;i<=7;i++)
         { cx_vecin=cx_curent+dx[i];
           cy_vecin=cy_curent+dy[i];
           if(cx_vecin>=1 && cx_vecin<=n && cy_vecin>=1 && cy_vecin<=m &&
              nrR[cx_vecin][cy_vecin]==0 || nrR[cx_vecin][cy_vecin]==-1 )
                   { if(nrR[cx_vecin][cy_vecin]==-1)
                         break;
                     else
                        { ul++;
                          cx[ul]=cx_vecin;
                          cy[ul]=cy_vecin;
                          nrR[cx_vecin][cy_vecin]=nrR[cx_curent][cy_curent]+1;
                        }
                   }
         }
      pr++;
    }
}

void LeeJ()
{ int i,j,cx_curent,cy_curent,cx_vecin,cy_vecin;
  pr=ul=1;
  cx[pr]=linJ; cy[pr]=colJ; nrJ[linJ][colJ]=1; nrJ[linR][colR]=-1;
  while(pr<=ul)
    { cx_curent=cx[pr];
      cy_curent=cy[pr];

      if(nrJ[cx_curent][cy_curent]==nrR[cx_curent][cy_curent])
            { answer=nrJ[cx_curent][cy_curent]; linfinal=cx_curent; colfinal=cy_curent;
              break;
            }

      for(i=0;i<=7;i++)
         { cx_vecin=cx_curent+dx[i];
           cy_vecin=cy_curent+dy[i];
           if(cx_vecin>=1 && cx_vecin<=n && cy_vecin>=1 && cy_vecin<=m &&
              nrJ[cx_vecin][cy_vecin]==0 || nrJ[cx_vecin][cy_vecin]==-1 )
                   { if(nrJ[cx_vecin][cy_vecin]==-1)
                         break;
                     else
                        { ul++;
                          cx[ul]=cx_vecin;
                          cy[ul]=cy_vecin;
                          nrJ[cx_vecin][cy_vecin]=nrJ[cx_curent][cy_curent]+1;
                        }
                   }
         }
      pr++;
    }
}

int main()
{   int i,j;
    Citire();
    LeeR();
    LeeJ();
/*
    for(i=1;i<=n;i++)
       { for(j=1;j<=m;j++)
           fout<<nrR[i][j]<<" ";
         fout<<"\n";
       }
*/
    fout<<answer<<" "<<linfinal<<" "<<colfinal;
    return 0;
}