Cod sursa(job #363271)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 12 noiembrie 2009 16:30:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream.h>
char h[105][105];
int a[105][105],n,m,xr,yr,xj,yj,b[105][105],dx[9]={0,0,1,0,-1,1,1,-1,-1},dy[9]={0,1,0,-1,0,1,-1,-1,1};
char x[10009],y[10009];      //00
int main()
{int i,j;
ifstream q("rj.in");
ofstream w("rj.out");
q>>n>>m;
q.get();
for(i=1;i<=n;i++)
  {for(j=1;j<=m;j++)
     {h[i][j]=q.get();
     if(h[i][j]=='R')
      {xr=i;
      yr=j;}
     if(h[i][j]=='J')
      {xj=i;
      yj=j;}}
  q.get();}
int l,xi,yi,d,st=1,dr=1;
x[1]=xr;
y[1]=yr;
b[xr][yr]=1;
while(st<=dr)
   {d=b[x[st]][y[st]]+1;
   for(l=1;l<=8;l++)
     {xi=x[st]+dx[l];
     yi=y[st]+dy[l];
     if(xi<=n && xi>=1 && yi<=m && yi>=1)
      if((b[xi][yi]==0 || b[xi][yi]>d) && h[xi][yi]!='X')
       {dr++;
       x[dr]=xi;
       y[dr]=yi;
       b[xi][yi]=d;}}
     st++;}
st=1;
dr=1;
x[1]=xj;
y[1]=yj;
a[xj][yj]=1;
while(st<=dr)
   {d=a[x[st]][y[st]]+1;
   for(l=1;l<=8;l++)
     {xi=x[st]+dx[l];
     yi=y[st]+dy[l];
if(xi<=n && xi>=1 && yi<=m && yi>=1)
 if((a[xi][yi]==0 || a[xi][yi]>d) && h[xi][yi]!='X')
  {dr++;
  x[dr]=xi;
  y[dr]=yi;
  a[xi][yi]=d;}}
  st++;}
int min=10000,p,x;
for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
    if(a[i][j]!=0 && a[i][j]==b[i][j] && a[i][j]<min)
     {p=i;
     x=j;
     min=a[i][j];}
w<<min<<" "<<p<<" "<<x;
w.close();
q.close();
return 0;
}