Cod sursa(job #2244821)

Utilizator stefanut999Paul Colta stefanut999 Data 23 septembrie 2018 19:31:40
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <fstream>

#include <queue>
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,xj,yj,xr,u,yr,R[102][102],J[102][102];
int dlin[9]={-1, -1, -1, 0, 0, 1, 1, 1};
int dcol[9]={-1, 0, 1, -1, 1, -1, 0, 1};

queue<pair<int, int> >c;


void citire()
{int j,i;
char l[102];
fin>>n>>m;
fin.getline(l,100);
for(i=0; i<n; i++)
    {fin.getline(l,101);
     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;
     }}
}

}

 void LEER( )
{
  int i,xn,yn,x,y;

  c.push(make_pair(xr, yr));
  R[xr][yr] = 1;
  while(!c.empty())
  {x = c.front().first;
    y = c.front().second;
   for(i=0; i<8; i++)
   { xn = x+dlin[i];
     yn = y+dcol[i];
     if(!R[xn][yn] && xn<n && xn>=0 && yn<m && yn>=0)
     {
        R[xn][yn]=1+R[x][y];
        c.push(make_pair(xn, yn));
     }

   }
    c.pop();

  }

}

 void LEEJ( )
{
  int i,xn,yn,x,y;

  c.push(make_pair(xj, yj));
  J[xj][yj] = 1;
  while(!c.empty())
  {x = c.front().first;
    y = c.front().second;
   for(i=0; i<8; i++)
   { xn = x+dlin[i];
     yn = y+dcol[i];
     if(!J[xn][yn] && xn<n && xn>=0 && yn<m && yn>=0)
     {
        J[xn][yn]=1+J[x][y];
        c.push(make_pair(xn, yn));
     }

   }
    c.pop();

  }

}


int main()
{citire();
 int XF,YF,i,j, dmin=2000000;
 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] && J[i][j]<dmin)
        {dmin=R[i][j];
         XF=i;
         YF=j;
        }
    }
 fout<<dmin<<' '<<XF+1<<' '<<YF+1;
 fin.close();
 fout.close();
return 0;
}