Cod sursa(job #1206392)

Utilizator cojocarugabiReality cojocarugabi Data 9 iulie 2014 20:04:59
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <fstream>
#include <iostream>
#include <cstdio>
#define nmax 102

using namespace std;

int m[nmax][nmax],s[nmax][nmax];
int p1[8]={0, 1, 0, -1, -1, 1, -1, 1};
int o [8]={1, 0, -1, 0, -1, 1,  1,-1};
int k,l;
ofstream fo("rj.out");
void lee(int a,int b,int p[nmax][nmax])
{
    p[a][b]=1;
    int i,j;
    for (i=0;i<k+2;++i)
    {
        p[i][0]=-1;
        p[i][l+1]=-1;
    }
    for (i=0;i<l+2;++i)
    {
        p[0][i]=-1;
        p[k+1][i]=-1;
    }
    int x[k*l],y[k*l],f=1,g=1;
    x[1]=a;
    y[1]=b;
    while (f<=g)
    {
        for (i=0;i<8;++i)
            if (p[x[f]+p1[i]][y[f]+o[i]] == -2 && (x[f]+p1[i] != a || y[f]+o[i] !=b))
            {
               p[x[f]+p1[i]][y[f]+o[i]]=p[x[f]][y[f]]+1;
               ++g;
               x[g]=x[f]+p1[i];
               y[g]=y[f]+o[i];
            }
        ++f;
    }
}
int main()
{
      freopen("rj.in","r",stdin);
      char o;
      scanf("%d%d%c",&k,&l,&o);
      int i,j;
      int a,b,c,d;
      for (i=1;i<=k;++i)
      {
      for (j=1;j<=l;++j)
      {
          scanf("%c",&o);
          if (o == ' ')
          {
              m[i][j]=-2;
              s[i][j]=-2;
          }
          else
          if (o == 'X')
          {
              m[i][j]=-1;
              s[i][j]=-1;
          }
          else
          if (o == 'R')
          {
              s[i][j]=-1;
              m[i][j]=-1;
              a=i;
              b=j;
          }
          else
          if (o == 'J')
          {
              m[i][j]=-1;
              s[i][j]=-1;
              c=i;
              d=j;
          }
      }
      scanf("%c/n",&o);
      }
      lee(a,b,s);
      lee(c,d,m);
      int xm,ym,mm=999999;
      for (i=1;i<=k;++i)
      for (j=1;j<=l;++j)
        if (s[i][j] == m[i][j] && s[i][j] >-1 && m[i][j] >-1 && s[i][j] < mm)
        {
            mm=s[i][j];
            xm=i;
            ym=j;
        }
      fo<<mm<<" "<<xm<<" "<<ym<<"\n";
      fo.close();
      return 0;
}