Cod sursa(job #2545955)

Utilizator TzancaUraganuFacePbLaInfoMihai Andrei TzancaUraganuFacePbLaInfo Data 13 februarie 2020 18:31:40
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.68 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

ifstream f("rj.in");
ofstream g ("rj.out");

char a[101][101];
int b[101][101],c[101][101],i,j,n,m,ct,xi,yi,xf,yf,pr,ur,pj,uj,cr[102][3],cj[102][3],ok,ir,jr,ij,jj,k;
int irnou,jrnou,ijnou,jjnou,br;

const int di[8]={-1,-1,-1,0,0,1,1,1};
const int dj[8]={-1,0,1,-1,1,-1,0,1};

void citire(){
 f>>m>>n;
 f.get();
 for(i=1;i<=m;i++)
 {
     f.getline(a[i]+1,101);
     for(j=1;j<=n;j++)
     {
         if(a[i][j]=='R')
            {
                xi=i;yi=j;
            }
         if(a[i][j]=='J')
           {
               xf=i;yf=j;
           }
     }
 }

}
int verificarer(int i,int j)
{
    if(i<1 || j<1 || i>m || j>n)
        return 0;
    if((int)a[i][j]!=32 || b[i][j]!=0)
        return 0;
    /*if(b[i][j]!=0)
        if(b[i][j]==b[i][j]-1)
         return 2;
    else
        return 0;*/
    return 1;
}int verificarej(int i,int j)
{
    if(i<1 || j<1 || i>m || j>n)
        return 0;
    if((int)a[i][j]!=32 || c[i][j]!=0)
        return 0;
    /*if(b[i][j]!=0)
        if(b[i][j]==b[i][j]-1)
         return 2;
    else
        return 0;*/
    return 1;
}
/*void Lee(){
   pr=ur=1;
   pj=uj=1;
   cr[pr][1]=xi;cj[pj][1]=xf;
   cr[pr][2]=yi;cj[pj][2]=yf;
   b[xi][yi]=1;b[xf][yf]=-1;
   while(pr<=ur && pj<=uj && !ok)
   {
       ir=cr[pr][1];ij=cj[pj][1];
       jr=cr[pr][2];jj=cj[pj][2];
       for(k=0;k<8;k++)
       {
           irnou=ir+di[k];ijnou=ij+di[k];
           jrnou=jr+di[k];jjnou=jj+di[k];
           if(verificare(irnou,jrnou))
           {
               b[irnou][jrnou]=b[ir][jr]+1;
               ur++;
               cr[ur][1]=irnou;
               cr[ur][2]=jrnou;
           }
           if(verificare(ijnou,jjnou))
            if(verificare(ijnou,jjnou)==2)
             {
               ok=1;
                g<<b[ir][jr]+1<<" "<<irnou<<" "<<jrnou;
             }
             else
           {
               b[ijnou][jjnou]=b[ij][jj]-1;
               uj++;
               cj[uj][1]=ijnou;
               cj[uj][2]=jjnou;
           }
           /*if(irnou==ijnou && jrnou==jjnou && b[ir][jr]==-b[ij][jj])
           {
               ok=1;
               g<<b[ir][jr]+1;
               g<<" "<<irnou<<" "<<jrnou;
           }*/
       //}
      //pr++;
    //  pj++;
  // }
//}
void LeeRomeo(){
  pr=ur=1;
  cr[pr][1]=xi;
  cr[pr][2]=yi;
  b[xi][yi]=1;
  ok=0;
  while(pr<=ur && !ok)
  {
      ir=cr[pr][1];
      jr=cr[pr][2];
      for(k=0;k<8;k++)
      {
          irnou=ir+di[k];
          jrnou=jr+dj[k];
          if(verificarer(irnou,jrnou))
          {
              b[irnou][jrnou]=b[ir][jr]+1;
              ur++;
              cr[ur][1]=irnou;
              cr[ur][2]=jrnou;
          }
          if(irnou==xf && jrnou==yf)
            ok=1;
      }
      pr++;
  }
}
void LeeJulieta(){
  pj=uj=1;
  cj[pj][1]=xf;
  cj[pj][2]=yf;
  c[xf][yf]=1;
  ok=0;
  while(pj<=uj && !ok)
  {
      ij=cj[pj][1];
      jj=cj[pj][2];
      for(k=0;k<8;k++)
      {
          ijnou=ij+di[k];
          jjnou=jj+dj[k];
          if(verificarej(ijnou,jjnou))
          {
              c[ijnou][jjnou]=c[ij][jj]+1;
              uj++;
              cj[uj][1]=ijnou;
              cj[uj][2]=jjnou;
          }
          if(ijnou==xi && jjnou==yi)
            ok=1;
      }
      pj++;
  }
}
int main()
{
    citire();
    LeeRomeo();LeeJulieta();
    for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
        if(b[i][j]==c[i][j] && b[i][j]!=0)
        g<<b[i][j]<<" "<<i<<" "<<j;
   /* for(i=1;i<=m;i++,cout<<endl)
        for(j=1;j<=n;j++)
        cout<<a[i][j];*/

    return 0;
}