Cod sursa(job #412404)

Utilizator DrakeDemonSebestin Dragos DrakeDemon Data 5 martie 2010 16:25:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <stdio.h>

int i,j,iR,iJ,jR,jJ,R[102][102],J[102][102],n,m;
char s[102];
int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int d,ic,jc,iv,jv,p,u,c[2][102*102],ifin,jfin,min;

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++){
		fgets(s,100,f);
		for(j=0; j<m; j++){
			if(s[j] == 'R'){
				J[i][j+1] = -1;
				R[i][j+1] = -1;
				iR = i;
				jR = j+1;
			}
			if(s[j] == 'J'){
				J[i][j+1] = -2;
				R[i][j+1] = -2;
				iJ = i;
				jJ = j+1;
			}
			if(s[j] == 'X'){
				R[i][j+1] = -3;
				J[i][j+1] = -3;
			}
		}
	}
	
	for(i=0; i<=n+1; i++){
		R[0][i] = -3;
		R[n+1][i] = -3;
		J[0][i] = -3;
		J[n+1][i] = -3;
	}
	for(i=0; i<=m+1; i++){
		R[i][0] = -3;
		R[i][m+1] = -3;
		J[i][0] = -3;
		J[i][m+1] = -3;
	}
	
	p=u=1;
	c[0][1] = iR;
	c[1][1] = jR;
	R[iR][jR] = 1;
	while(p<=u){
		ic = c[0][p];
		jc = c[1][p];
		for(d=0; d<=7; d++){
			iv = ic + dx[d];
			jv = jc + dy[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][1] = iJ;
	c[1][1] = jJ;
	J[iJ][jJ] = 1;
	while(p<=u){
		ic = c[0][p];
		jc = c[1][p];
		for(d=0; d<=7; d++){
			iv = ic + dx[d];
			jv = jc + dy[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);

		
	fclose(f);fclose(g);
	return 0;
}