Cod sursa(job #2719051)

Utilizator marian_tudormarian tudor-stefan marian_tudor Data 9 martie 2021 15:32:12
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.74 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,a[100][100];

struct cord
{
    int x=-1,y;
}cr[101],cj[101];

void citire()
{
    char x[100];
    fin.getline(x,0);
    for(int i=0;i<n;i++)
    {
     fin.getline(x,100);
     for(int j=0;j<m;j++)
     {
      if(x[j]=='X') a[i][j]=-1;
      if(x[j]=='R') cr[1].x=i,cr[1].y=j,a[i][j]=1;
      if(x[j]=='J') cj[1].x=i,cj[1].y=j,a[i][j]=1;
     }
    }
}

void el(cord v[],int &n)
{
    int i;
    for(i=1,n--;i<=n;i++) v[i]=v[i+1];
}

void Lee()
{
    int i,j,x,y,d,lr=1,lj=1;
    for(d=1;lr&&lj;d++)
    {
     while(lr&&a[cr[1].x][cr[1].y]==d)
     {
      for(i=-1;i<2;i++) for(j=-1;j<2;j++)
      {
       if(!i&&!j) continue;
       x=cr[1].x+i,y=cr[1].y+j;
       if(x>=0&&y>=0&&x<n&&y<m) if(!a[x][y]) cr[++lr].x=x,cr[lr].y=y,a[x][y]=a[cr[1].x][cr[1].y]+1;
      }
      el(cr,lr);
     }
     while(lj&&a[cj[1].x][cj[1].y]==d)
     {
      for(i=-1;i<2;i++) for(j=-1;j<2;j++)
      {
       if(!i&&!j) continue;
       x=cj[1].x+i,y=cj[1].y+j;
       if(x>=0&&y>=0&&x<n&&y<m) if(!a[x][y]) cj[++lj].x=x,cj[lj].y=y,a[x][y]=a[cj[1].x][cj[1].y]+1;
                                else if(a[x][y]==d+1) for(int p=1;p<=lr;p++) if(a[cr[p].x][cr[p].y]==d+1&&cr[p].x==x&&cr[p].y==y)
                                {
                                 fout<<d+1<<' '<<cr[p].x+1<<' '<<cr[p].y+1;
                                 return;
                                }
      }
      el(cj,lj);
     }
    }
}

int main()
{
    fin>>n>>m;
    citire();
    Lee();//for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {if(a[i][j]>=0) cout<<' ';cout<<a[i][j]<<' ';}cout<<endl;}
    return 0;
}