Cod sursa(job #3231154)

Utilizator BuruianaRaresAndreiBuruiana Rares Andrei BuruianaRaresAndrei Data 25 mai 2024 08:39:58
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <fstream>
#include <string>
#include <queue>

#define NMAX 101

using namespace std;

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

char c;
int n, m, xr, yr, xj, yj;

short di[]={-1, -1, -1, 0, 1, 1, 1, 0}, dj[]={-1, 0, 1, 1, 1, 0, -1, -1};
int ro[NMAX+1][NMAX+1], ju[NMAX+1][NMAX+1];

void citire()
{
 int i, j;
 fin>>n>>m;
 string line;
 getline(fin, line);
 for(i=1; i<=n; i++)
    {
     getline(fin, line);
     for(j=0; j<m; j++)
        {
         if(line[j]=='X')
           {
            ro[i][j+1]=-1;
            ju[i][j+1]=-1;
           }
            else if(line[j]=='R')
                   {
                    xr=j+1;
                    yr=i;
                   }
                    else if(line[j]=='J')
                           {
                            xj=j+1;
                            yj=i;
                           }
                            else
                                {
                                 ro[i][j+1] = 0;
                                 ju[i][j+1] = 0;
                                }
        }
    }
}

bool inside(int y, int x)
{
 return y>=1&&y<=n&&x>=1&&x<=m;
}

void Lee(int v[][NMAX+1], int y1, int x1)
{
 int i, j, iv, jv;
 queue<pair<int, int> > q;
 q.push({y1, x1});
 v[y1][x1] = 1;
 while(!q.empty())
      {
       i=q.front().first;
       j=q.front().second;
       for(int k=0; k<8; k++)
          {
           iv=i+di[k];
           jv=j+dj[k];
           if(inside(iv, jv) && v[iv][jv]==0)
             {
              v[iv][jv]=v[i][j]+1;
              q.push({iv, jv});
             }
          }
       q.pop();
      }
}

int main()
{
 int i, j;
 citire();
 Lee(ro, yr, xr);
 Lee(ju, yj, xj);
 int minv = n*m, mini = NMAX+1, minj = NMAX+1;
 for(i=1; i<=n; i++)
     for(j=1; j<=m; j++)
         if(ro[i][j]==ju[i][j] && ro[i][j]!=-1 && ro[i][j]!=0)
           {
            if(ro[i][j]<minv)
              {
               minv=ro[i][j];
               mini=i;
               minj=j;
              }
           }
 fout<<minv<<' '<<mini<<' '<<minj;
 return 0;
}