Cod sursa(job #80073)

Utilizator coderninuHasna Robert coderninu Data 25 august 2007 21:15:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <stdio.h>
#define infile "rj.in"
#define outfile "rj.out"
#define nmax 101

int v[2][nmax][nmax], i, j, n, m, cx[nmax*55], cy[nmax*55], p=1, u, tmin=32000, xx, yy, dx[8]={-1,-1,0,1,1,1,0,-1}, dy[8]={0,1,1,1,0,-1,-1,-1}, coord[2][2];

void readdata();
void writedata();
void solve();

int inside(int,int);

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}

void readdata()
{
 char c;
 freopen(infile, "r", stdin);
 scanf("%d %d\n", &n, &m);
 for (i=1; i<=n; i++)
     for (j=1; j<=m+1; j++)
	 {
	  scanf("%c", &c);
	  if (c=='X') v[0][i][j]=v[1][i][j]=-1;
	  if (c==' ') v[0][i][j]=v[1][i][j]=0;
	  if (c=='R') { coord[0][0]=i; coord[0][1]=j; v[0][i][j]=v[1][i][j]=1; }
	  if (c=='J') { coord[1][0]=i; coord[1][1]=j; v[0][i][j]=v[1][i][j]=1; }
	 }
 fclose(stdin);
}

void writedata()
{
 freopen(outfile, "w", stdout);
 printf("%d %d %d\n", tmin, xx, yy);
 fclose(stdin);
}

int inside(int x, int y)
{
 if (x<1 || x>n) return 0;
 if (y<1 || y>m) return 0;
 return 1;
}

void solve()
{
 int x,y;

 for (int ii=0; ii<=1; ii++)
 {
  p=u=1;
  cx[u]=coord[ii][0];
  cy[u]=coord[ii][1];
  while (p<=u)
     {
      x=cx[p];
      y=cy[p++];
      for (int l=0; l<8; l++)
	  {
	   if ( inside(x+dx[l], y+dy[l]))

		if (!v[ii][x+dx[l]][y+dy[l]])
		    {
		     cx[++u]=x+dx[l];
		     cy[u]=y+dy[l];
		     v[ii][x+dx[l]][y+dy[l]]=v[ii][x][y]+1;
		    }

	  }
     }
 }
 for (i=1; i<=n; i++)
     for (j=1; j<=m; j++)
	 if (v[0][i][j]==v[1][i][j] && v[0][i][j]>1)
	     {
	      tmin=v[1][i][j];
	      xx=i;
	      yy=j;
	     }
}