Cod sursa(job #2561781)

Utilizator darianegreanDaria Negrean darianegrean Data 29 februarie 2020 10:04:07
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m; char s[105];
int di[8]={-1,-1, 0, 1, 1, 1, 0,-1};
int dj[8]={0, 1, 1, 1, 0,-1,-1,-1};
int matr[105][105],matj[105][105];
queue< pair<int, int> >coadar;
queue< pair<int, int> >coadaj;
bool ok(int ii,int jj)
{
    if(ii<1 or jj<1 or ii>n or jj>m)return false;
   return true;
}
void lee(int mat[105][105],queue<pair<int,int> >coada)
{

      while(!coada.empty())
      {int ii,jj;
      ii=coada.front().first;
      jj=coada.front().second;
      coada.pop();
          for(int dir=0;dir<8;dir++)
          {
              int i_urm,j_urm;
              i_urm=ii+di[dir];
              j_urm=jj+dj[dir];
              if(ok(i_urm,j_urm)and mat[i_urm][j_urm]==0)
              {
                  mat[i_urm][j_urm]=mat[ii][jj]+1;
                  coada.push(make_pair(i_urm,j_urm));
              }
          }
      }
}
int main()
{
   in>>n>>m;
   in.get();
   for(int i=1;i<=n+1;i++)
   {
       in.getline(s,m+1);
    for(int j=0;j<m;j++)
    {
        if(s[j]=='X'){matr[i][j+1]=-1;matj[i][j+1]=-1;}
        else if(s[j]=='R'){coadar.push(make_pair(i,j+1));matr[i][j+1]=1;}
        else if(s[j]=='J'){coadaj.push(make_pair(i,j+1));matj[i][j+1]=1;}
    }
   }
   lee(matr,coadar);
   lee(matj,coadaj);
   int tmin=9999,istop,jstop;
   for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
        if(matr[i][j]==matj[i][j] and matr[i][j]<tmin and matj[i][j]>0)
     {
         tmin=matr[i][j];
         istop=i;jstop=j;
     }
     out<<tmin<<" "<<istop<<" "<<jstop;
}