Cod sursa(job #1909098)

Utilizator oana.durcauOana Durcau oana.durcau Data 7 martie 2017 11:38:19
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int const diri[]={-1,-1,0,1,1,1,0,-1};
int const dirj[]={0,1,1,1,0,-1,-1,-1};
int m, n,i,j,Ri, Rj, Ji,Jj,ii,jj,dir,mini, minj;
char ch[105];
int R[105][105], J[105][105];
queue <pair<int,int> >q;
int ok(int i, int j)
{
    if(i>0 && j>0 && i<=n && i<=m)
        return 1;
    return 0;
}

void lee(int m[105][105], int iinc, int jinc)
{
    q.push({iinc,jinc});
    m[iinc][jinc]=1;
     while(!q.empty())
     {
         i=q.front().first;
         j=q.front().second;
         q.pop();
         for(dir=0; dir<8; dir++)
         {
             ii=i+diri[dir];
             jj=j+dirj[dir];
             if(ok(ii,jj) && R[ii][jj]!=-1 && m[ii][jj]>m[i][j]+1)
             {
                 m[ii][jj]=m[i][j]+1;
             q.push({ii,jj});
             }

         }
     }

}
int main()
{
 int minim=999999999;
    fin>>n>>m;
    fin.get();
    for(i=1; i<=n; i++)
    {
        fin.getline(ch,105);
        for(j=0; j<strlen(ch); j++)
        {
            if(ch[j]==' ')
             {
                  R[i][j+1]=999999999;
                  J[i][j+1]=999999999;

             }
             if(ch[j]=='X')
             {
                  R[i][j+1]=-1;
                  J[i][j+1]=-1;

             }

            if(ch[j]=='R')
            {
                R[i][j+1]=2;
                Ri=i;
                Rj=j+1;
                J[i][j+1]=999999999;
            }

            if(ch[j]=='J')
            {
                 J[i][j+1]=2;
                 Ji=i;
                 Jj=j+1;
                 R[i][j+1]=999999999;
            }


        }


    }
    lee(R,Ri,Rj);
    lee(J,Ji,Jj);

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
          if(R[i][j]>0 && R[i][j]==J[i][j] && R[i][j]<minim)
    {
          minim=R[i][j];
          mini=i;
          minj=j;
    }

     fout<<minim<<' '<<mini<<' '<<minj;
    return 0;
}