Cod sursa(job #145892)

Utilizator Mishu91Andrei Misarca Mishu91 Data 29 februarie 2008 18:02:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#define Nmax 101


FILE *fin=freopen("rj.in","r",stdin),
     *fout=freopen("rj.out","w",stdout);

int n,m,r[Nmax][Nmax],ju[Nmax][Nmax],xr,yr,xj,yj;
const int dx[]={-1,-1,-1,0,0,1,1,1},
	  dy[]={-1,0,1,-1,1,-1,0,1};


void citire()
{
  scanf("%d %d",&n,&m);
  fgetc(fin);
  for(int i=0;i<n;i++)
    for(int j=0;j<m;)
    {
      char ch=fgetc(fin);
      if(ch=='X')
      {
	r[i][j]=ju[i][j]=-1;
	j++;
      }
      if(ch=='R')
      {
	xr=i;
	yr=j;
      }
      if(ch=='J')
      {
	xj=i;
	yj=j;
      }
      if(ch==' '||ch=='R'||ch=='J')j++;
    }
}

void lee(int a[Nmax][Nmax], int xi,int yi)
{
  int x[Nmax*Nmax],y[Nmax*Nmax],li,lf;
  x[li=lf=0]=xi;
  y[0]=yi;
  a[xi][yi]=1;
  int xc,yc,xvec,yvec;
  for(;li<=lf;li++)
  {
    xc=x[li];
    yc=y[li];

    for(int i=0;i<8;i++)
    {
      xvec=xc+dx[i];
      yvec=yc+dy[i];

      if(xvec>=0 && yvec>=0 && xvec<n && yvec<n)
	if(a[xvec][yvec]==0)
	{
	  lf++;
	  x[lf]=xvec;
	  y[lf]=yvec;
	  a[xvec][yvec]=a[xc][yc]+1;
	}
      }
  }
}

void solve()
{
  lee(r,xr,yr);
  lee(ju,xj,yj);
  int x,y,tmin=Nmax*Nmax+1;
  for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
      if(r[i][j]==ju[i][j] && r[i][j]>0)
	if(r[i][j]<tmin)
	{
	  tmin=r[i][j];
	  x=i;
	  y=j;
	}
  printf("%d %d %d",tmin,x+1,y+1);
}

int main()
{
  citire();
  solve();
  return 0;
}