Cod sursa(job #1336892)

Utilizator ris99Istrate Ruxandra ris99 Data 8 februarie 2015 13:38:51
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct punct {int l,c;} c[10404],v;
int dl[8]={0, 1, 0, -1, -1, 1, -1, 1},dc[8]={1, 0, -1, 0, -1, 1,  1,-1};
char a[102][102];
int r[102][102],j[102][102],xr,yr,xj,yj,n,m;
void citire ()
{ int i,k;
  char c;
  f>>n>>m;
  for (i=0;i<=n+1;i++)
  a[i][0]=a[i][m+1]='X';
  for (k=0;k<=m+1;k++)
  a[0][k]=a[n+1][k]='X';
  f.get(c);
  for (i=1;i<=n;i++)
  { for (k=1;k<=m;k++)
    {f.get(c);
    a[i][k]=c;
    if (a[i][k]=='R') {xr=i;yr=k;a[i][k]=' ';}
    if (a[i][k]=='J') {xj=i;yj=k;a[i][k]=' ';}
    }
  f.get(c);
}

f.close ();
}
void lee (int x0,int y0,int d[102][102])
{ int p=0,u=0,i,k,l1,c1;
  for (i=0;i<=n+1;i++)
  for (k=0;k<=m+1;k++)
  d[i][k]=-1;
  c[0].l=x0;
  c[0].c=y0;
  d[x0][y0]=1;
  while (p<=u)
  { v=c[p];
    for (i=0;i<=7;i++)
    { l1=v.l+dl[i];
      c1=v.c+dc[i];
      if (a[l1][c1]==' '&&d[l1][c1]==-1)
      { d[l1][c1]=1+d[v.l][v.c];
      c[++u].l=l1;
      c[u].c=c1;
      }
    }
    p++;
   }
   }
 void afisare (int j[102][102])
 { int tmin=10409,xmin=-1,ymin=-1,i,k;
   for (i=1;i<=n;i++)
   for (k=1;k<=m;k++)
   if (r[i][k]==j[i][k])
   if (r[i][k]<tmin && r[i][k]!=-1)
   { tmin=r[i][k];
     xmin=i;
     ymin=k;
  }
  g<<tmin<<' '<<xmin<<' '<<ymin;


 }
int main()
{
  citire ();
  lee(xr,yr,r);
  lee(xj,yj,j);
  afisare(j);

    return 0;
}