Cod sursa(job #81713)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 3 septembrie 2007 23:16:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>

int a[100][100], b[100][100], xj, yj, xr, yr, m, n;
int dx[8]={1,1,0,-1,-1,-1,0,1}, dy[8]={0,1,1,1,0,-1,-1,-1};

typedef struct
{
  int x,y;
} Coada;

Coada C[10000];

char c;

void citire()
{
  freopen("rj.in","r",stdin);
  freopen("rj.out","w",stdout);

  int i, j;

  scanf("%d %d",&n,&m);

  for (i=1; i<=n; i++)
    for (j=1; j<=m; j++)
      {
	scanf ("%c",&c);
	if (c=='X') a[i][j]=b[i][j]=-1;
	if (c==' ') a[i][j]=b[i][j]=0;
	if (c=='J') {a[i][j]=b[i][j]=1; xj=i; yj=j;}
	if (c=='R') {a[i][j]=b[i][j]=1; xr=i; yr=j;}
      }
  for (i=0; i<=n+1; i++) a[i][0]=b[i][0]=a[i][m+1]=b[i][m+1]=-2;
  for (i=0; i<=m+1; i++) a[0][i]=b[0][i]=a[n+1][i]=b[n+1][i]=-2;
}

void parcurs(int x, int y, int a[100][100])
{
  int xn,yn,p, u, i;
  p=u=1;
  C[p].x=x;
  C[p].y=y;
  while (p<=u)
    {
      for(i=0; i<8; i++)
	{
	  xn=x+dx[i];
	  yn=y+dy[i];
	  if (a[xn][yn]==0)
	    {
	      C[++u].x=xn; C[++u].y=yn;
	      a[xn][yn]=a[x][y]+1;
	    }
	}
      p++;
    }
}

void verif()
{
  int minim=1000, i, j;
  for (i=1; i<=n; i++)
    for (j=1; j<=m; j++)
      if (a[i][j]==b[i][j]) if (a[i][j]<minim) minim=a[i][j];
  printf("%d",minim);
}

int main()
{
 citire();
 parcurs(xj,yj,a);
 parcurs(xr,yr,b);
 verif();
 return 0;
}