Cod sursa(job #401958)

Utilizator DrakeDemonSebestin Dragos DrakeDemon Data 23 februarie 2010 11:09:13
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#define DIM 102

int di[8]={0,0,1,-1,1,1,-1,-1};
int dj[8]={1,-1,0,0,-1,1,-1,1};
int i,j,ir,ij,jr,jj,ic,iv,jc,jv,u,p,d,n,m;
int R[DIM][DIM], J[DIM][DIM], c[2][DIM*DIM] ;
char w;
int min,ifin,jfin;

int main(){
	FILE *f = fopen("rj.in","r");
	FILE *g = fopen("rj.out","w");
	fscanf(f,"%d %d",&n,&m);
	fscanf(f,"%c",&w);
	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(d=0; d<=7; d++){
			iv = ic + di[d];
			jv = jc + dj[d];
			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(d=0; d<=7; d++){
			iv = ic + di[d];
			jv = jc + dj[d];
			if(J[iv][jv] == 0){
				u++;
				c[0][u] = iv;
				c[1][u] = jv;
				J[iv][jv] = J[ic][jc] + 1;
			}
		}
		p++;
	}
	
	min = 1993;
	
	for(i=1; i<=n; i++)
		for(j=1; j<=m; j++){
			if((R[i][j] == J[i][j]) && (R[i][j] > 0) && (R[i][j] < min)){
				ifin = i;
				jfin = j;
				min = R[i][j];
			}
		}
	
	fprintf(g,"%d %d %d",min, ifin, jfin);
/*	for(i=1;i<=n; i++){
		for(j=1;j<=m;j++)
			printf("%d ", R[i][j]);
		printf("\n");
		}*/
	
	fclose(f);fclose(g);
	return 0;
}