Cod sursa(job #2341740)

Utilizator Bogdan191Verman Bogdan Bogdan191 Data 12 februarie 2019 10:35:12
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>
#define N 105
using namespace std;

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

int J[N][N],R[N][N],n,m;
int lj,cj,lr,cr;

void Citire()
{ char s[N];
  int i,j;
  fin>>n>>m; fin.get();
  for(i=1;i<=n;i++)
     { fin.getline(s+1,N);
       for(j=1;s[j];j++)
         if(s[j]=='X') J[i][j]=R[i][j]=-1;
         else  if(s[j]=='J') lj=i,cj=j;
               else if(s[j]=='R') lr=i,cr=j;
     }
}

void Bordare(int a[][N],int n,int m)
{  int i;
   for(i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=-1;
   for(i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=-1;
}

void Lee(int a[][N], int li, int ci)
{ queue < pair <int,int> > Q;
  int l,c,lv,cv,k;
  int dl[]={-1,-1,-1,0,0,1,1,1};
  int dc[]={-1,0,1,-1,1,-1,0,1};
  Q.push({li,ci});
  a[li][ci]=1;
  while(!Q.empty())
     { l=Q.front().first;
       c=Q.front().second;
       Q.pop();
       for(k=0;k<8;k++)
          { lv=l+dl[k]; cv=c+dc[k];
            if(a[lv][cv]==0)
               { a[lv][cv]=a[l][c]+1;
                 Q.push({lv,cv});
               }
          }
     }
}


void Rezolva()
{ int i,j,vmin=n*m,imin,jmin;
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
     if(J[i][j]==R[i][j] && J[i][j]>0 && J[i][j]<vmin)
         { vmin=J[i][j];
           imin=i;
           jmin=j;
         }
  fout<<vmin<<" "<<imin<<" "<<jmin;
}

int main()
{  Citire();
   Bordare(J,n,m);
   Lee(J,lj,cj);
   Bordare(R,n,m);
   Lee(R,lr,cr);
   Rezolva();
   return 0;
}