Cod sursa(job #1858023)

Utilizator Miruna17Miruna Baceanu Miruna17 Data 26 ianuarie 2017 22:34:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.95 kb
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct pozitie
{int l,c;}coada[10205],z,z1;
int a[101][101],R[101][101],J[101][101],p,u,x,y,xr,xj,yr,yj,m,n,tmin,xint,yint;
void bordare (int a[101][101])
{
    for(int i=0;i<=n+1;i++)
       a[i][0]=a[i][m+1]=-1;
    for (int j=0;j<=m+1;j++)
       a[0][j]=a[n+1][j]=-1;
}
void Lee (int a[101][101], int x, int y)
{
    p=u=1;
    coada[p].l=x;
    coada[p].c=y;
    a[x][y]=1;
    while (p<=u)
    {
      z=coada[p];
      p++;
       if (a[z.l+1][z.c]==0)
       {
           z1.l=z.l+1;
           z1.c=z.c;
           coada[++u]=z1;
           a[z1.l][z1.c]=a[z.l][z.c]+1;
       }
       if (a[z.l-1][z.c]==0)
       {
           z1.l=z.l-1;
           z1.c=z.c;
           coada[++u]=z1;
           a[z1.l][z1.c]=a[z.l][z.c]+1;
       }
       if (a[z.l][z.c-1]==0)
       {
           z1.l=z.l;
           z1.c=z.c-1;
           coada[++u]=z1;
           a[z1.l][z1.c]=a[z.l][z.c]+1;
       }
       if (a[z.l][z.c+1]==0)
       {
           z1.l=z.l;
           z1.c=z.c+1;
           coada[++u]=z1;
           a[z1.l][z1.c]=a[z.l][z.c]+1;
       }
      if (a[z.l-1][z.c+1]==0)
      {
          z1.l=z.l-1;
          z1.c=z.c+1;
          coada[++u]=z1;
          a[z1.l][z1.c]=a[z.l][z.c]+1;
      }
      if (a[z.l+1][z.c+1]==0&&z.c+1<=n)
      {
         z1.l=z.l+1;
         z1.c=z.c+1;
         coada[++u]=z1;
         a[z1.l][z1.c]=a[z.l][z.c]+1;
      }
      if (a[z.l-1][z.c-1]==0&&z.c+1<=n)
      {
         z1.l=z.l-1;
         z1.c=z.c-1;
         coada[++u]=z1;
         a[z1.l][z1.c]=a[z.l][z.c]+1;
      }
      if (a[z.l+1][z.c-1]==0&&z.c+1<=n)
      {
         z1.l=z.l+1;
         z1.c=z.c-1;
         coada[++u]=z1;
         a[z1.l][z1.c]=a[z.l][z.c]+1;
      }
  }
}
void intalnire ()
{
    tmin=10201;
    for (int i=1;i<=n;i++)
       for (int j=1;j<=m;j++)
         if (R[i][j]==J[i][j]&&R[i][j]<tmin&&R[i][j]>0)
             tmin=R[i][j];
    for (int i=1;i<=n;i++)
       for (int j=1;j<=m;j++)
         if (R[i][j]==tmin)
         {
             xint=i;
             yint=j;
             break;
         }
   fout<<tmin<<" "<<xint<<" "<<yint;
}
int main()
{
  char s[105];
  fin>>n>>m;
  fin.get();
  for (int i=1;i<=n;i++)
  {
     fin.getline(s,105);
      for (int j=1;j<=m;j++)
      {
        x=s[j-1];
        if (x=='X')
          a[i][j]=-1;
        else
          if(x=='R')
            {
              xr=i;
              yr=j;
            }
          else
            if (x=='J')
              {
                xj=i;
                yj=j;
              }
             else a[i][j]=0;
       }
  }

    for (int i=1;i<=n;i++)
      for (int j=1;j<=m;j++)
        {
            R[i][j]=a[i][j];
            J[i][j]=a[i][j];
        }
    bordare (R);
    bordare (J);
    Lee (R,xr,yr);
    Lee (J,xj,yj);
    intalnire ();
   return 0;
}