Cod sursa(job #2161257)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 11 martie 2018 16:24:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#include <iomanip>
#include <climits>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int m1[105][105],n,m,ii,jj,m3[105][105],x,y,Min=INT_MAX;
int di[8]={-1,0,1,0,-1,1,1,-1};
int dj[8]={0,1,0,-1,-1,1,-1,1};
char p,m2[105];
bool ok2=0;
queue < pair <int ,int > > coada1,coada2;
void citire()
{
    in>>m >>n;
    in.get();
    for(int i=1;i<=n;i++)
    {
        in.get(m2,105);
             in.get();
             for(int j=0;j<m;j++)
             {
                 if(m2[j]==' ')
                    m1[i][j+1]=0;
                 else if(m2[j]=='X')
                    m1[i][j+1]=-1;
                 else if(m2[j]=='R')
                 {
                     m1[i][j+1]=1;
                     coada1.push(make_pair(i,j+1));
                 }
                 else if(m2[j]=='J')
                 {
                     m3[i][j+1]=1;
                     coada2.push(make_pair(i,j+1));
                 }
             }
    }

}

bool ok(int i,int j)
{
    if(i<1 || j<1 || i>n || j>m)
        return 0;
    if(m1[i][j]==-1)
        return 0;
    return 1;
}
void Lee()
{
   while(!coada1.empty())
   {
       int i=coada1.front().first;
       int j=coada1.front().second;
       coada1.pop();
       for (int d=0;d<8;d++)
       {
           int ni=i+di[d];
           int nj=j+dj[d];
           if(ok(ni,nj) && (m1[ni][nj]==0))
           {
               m1[ni][nj]=m1[i][j]+1;
               coada1.push(make_pair(ni,nj));
           }
       }
   }
   while(!coada2.empty())
   {
       int i=coada2.front().first;
       int j=coada2.front().second;
       coada2.pop();
       for (int d=0;d<8;d++)
       {
           int ni=i+di[d];
           int nj=j+dj[d];
           if(ok(ni,nj) &&(m3[ni][nj]==0))
           {
               m3[ni][nj]=m3[i][j]+1;
               coada2.push(make_pair(ni,nj));
           }
       }
   }
}
void sol()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        if(ok(i,j) &&(m3[i][j]!=0))
        {
            if(m1[i][j]==m3[i][j])
            {
                 if(m1[i][j]<Min)
                 {
                     Min=m1[i][j];
                     x=i;
                     y=j;
                 }
            }
        }
    out<<m1[x][y]<<"\n";
    out<<x<<" "<<y;
}
void afisare()
{
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=m;j++)
        cout<<setw(3)<<m1[i][j]<<" ";
        cout<<"\n";
  }

}
int main()
{
   citire();
   Lee();
  sol();

    return 0;
}