Cod sursa(job #1841237)

Utilizator horia.negreanuHoria Negreanu horia.negreanu Data 5 ianuarie 2017 14:20:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<string.h>
using namespace std;
int ro[102][102],ju[102][102],n,m,dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},maxi;
queue<pair<int,int> >c;
bool ok(int i,int j)
{
     if(i<1||i>n||j<1||j>m)
          return 0;
     return 1;
}
void lee(int a[102][102], int stx, int sty)
{
     int i,j,iurm,jurm,dir;
     while(!c.empty())
          c.pop();
     c.push(make_pair(stx,sty));
     while(!c.empty())
     {
          i=c.front().first;
          j=c.front().second;
          c.pop();
          for(dir=0;dir<8;dir++)
          {
               iurm=i+dl[dir];
               jurm=j+dc[dir];
               if(ok(iurm,jurm) && a[iurm][jurm]==0)
               {
                    a[iurm][jurm]=a[i][j]+1;
                    maxi=a[iurm][jurm];
                    c.push(make_pair(iurm,jurm));
               }
          }
     }
}
int main()
{
     ifstream f("rj.in");
     ofstream g("rj.out");
     int i,j,srx,sry,sjx,sjy,maxr,maxj;
     char ch[102];
     bool k=0;
     f>>n>>m;
     f.get();
     for(i=1;i<=n;i++)
     {
          f.get(ch,102);
          f.get();
          for(j=0;j<strlen(ch);j++)
          {
               if(ch[j]=='X')
               {
                    ro[i][j+1]=-1;
                    ju[i][j+1]=-1;
               }
               else if(ch[j]==' ')
                    {
                         ro[i][j+1]=0;
                         ju[i][j+1]=0;
                    }
                    else if(ch[j]=='R')
                         {
                              ro[i][j+1]=1;
                              ju[i][j+1]=0;
                              srx=i;
                              sry=j+1;
                         }
                         else if(ch[j]=='J')
                              {
                                   ro[i][j+1]=0;
                                   ju[i][j+1]=1;
                                   sjx=i;
                                   sjy=j+1;
                              }
          }
     }
     lee(ro,srx,sry);
     maxr=maxi;
     lee(ju,sjx,sjy);
     maxj=maxi;
     if(maxr>maxj)
          maxr=maxj;
     for(maxi=1;maxi<=maxr&&k==0;maxi++)
     {
          for(i=1;i<=n;i++)
               for(j=1;j<=m;j++)
               {
                    if(ro[i][j]==ju[i][j] && ro[i][j]==maxi)
                         g<<maxi<<" "<<i<<" "<<j;
               }
     }
     return 0;
}