Cod sursa(job #299041)

Utilizator Addy.Adrian Draghici Addy. Data 6 aprilie 2009 15:52:19
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#define DIM 102

int C[2][DIM*DIM],R[DIM][DIM],J[DIM][DIM],i,j,ic,jc,iv,jv,isol,jsol,iR,jR,iJ,jJ,p,u,k,n,m,min;
int di[8]={0,0,1,-1,1,1,-1,-1};
int dj[8]={1,-1,0,0,-1,1,-1,1};
char w;

int main() {
	
  FILE *f = fopen("rj.in","r");
  FILE *g = fopen("rj.out","w");

  fscanf(f,"%d %d\n",&n,&m);
  
  for (i=1; i<=n; i++) {
	for (j=1; j<=m; j++) {
	  fscanf(f,"%c",&w);
	  if (w=='R') {
		iR = i;
		jR = j;
	  }
	  if (w=='J') {
		iJ = i;
		jJ = j;
	  }
	  if (w=='X')
		R[i][j] = J[i][j] = -1;
	}
	fscanf(f,"%c",&w);
  }
	
  for (j=0; j<=m+1; j++)
	R[0][j] = R[n+1][j] = J[0][j] = J[n+1][j] = -1;
	
  for (i=0; i<=n+1; i++)
	R[i][0] = R[i][m+1] = J[i][0] = J[i][m+1] = -1;
	
  p = u = 1;
  C[0][u] = iR;
  C[1][u] = jR;
  R[iR][jR] = 1;

  while (p<=u) {
	ic = C[0][p];
	jc = C[1][p];
	for (k=0; k<=7; k++) {
	  iv = ic + di[k];
	  jv = jc + dj[k];
	  if (R[iv][jv]==0) {
		u++;
		C[0][u] = iv;
		C[1][u] = jv;
		R[iv][jv] = R[ic][jc] + 1;
	  }
	}
	p++;
  }	  
  
  p = u = 1;
  C[0][u] = iJ;
  C[1][u] = jJ;
  J[iJ][jJ] = 1;
  
  while (p<=u) {
	ic = C[0][p];
	jc = C[1][p];
	for (k=0; k<=7; k++) {
	  iv = ic + di[k];
	  jv = jc + dj[k];
	  if (J[iv][jv]==0) {
		u++;
		C[0][u] = iv;
		C[1][u] = jv;
		J[iv][jv] = J[ic][jc] + 1;
	  }
	}
	p++;
  }
  
  min = 1002;
  
  for (i=1; i<=n; i++)
	for (j=1; j<=m; j++) 
	  if (R[i][j]==J[i][j] && R[i][j] < min && R[i][j] > 0) {
		isol = i;
		jsol = j;
		min = R[i][j];
	  }
	
  fprintf(g,"%d %d %d\n",min,isol,jsol);
	  
  fclose(f);
  fclose(g);
	
  return 0;
}