Cod sursa(job #497963)

Utilizator cnt_tstcont teste cnt_tst Data 3 noiembrie 2010 19:57:49
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>

FILE *f = fopen("rj.in", "r");
FILE *g = fopen("rj.out", "w");
int n,m,i,j,tmin,jmin,imin,ij,jj,ir,jr,p,u,ic,jc,iv,jv,min,d;
char x, a[102][102];
int R[102][102];
int J[102][102];
int c[2][102*102];
int di[8] = {0,0,-1,1,-1,1,-1,1};
int dj[8] = {1,-1,0,0,1,-1,-1,1};



int main () {
	fscanf(f, "%d%d\n", &n, &m);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			fscanf (f, "%c", &a[i][j]);
			if (a[i][j]=='R'){
				ir=i;
				jr=j;
			}
			if (a[i][j]=='J'){
				ij=i;
				jj=j;
			}
		}
		
		fscanf(f, "%c", &x);
		
	}
	
	c[0][1]=ir;
	c[1][1]=jr;
	p=u=1;
	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 (iv>=1 && iv<=n && jv>=1 && jv<=m && R[iv][jv]==0 && a[iv][jv]!= 'X'){
				u++;
				c[0][u] = iv;
				c[1][u] = jv;
				R[iv][jv]=R[ic][jc]+1;
			}
		}
		p++;
	}
	
	c[0][1]=ij;
	c[1][1]=jj;
	J[ij][jj]=1;
	p=u=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 (iv>=1 && iv<=n && jv>=1 && jv<=m && J[iv][jv]==0 && a[iv][jv]!= 'X'){
				u++;
				c[0][u] = iv;
				c[1][u] = jv;
				J[iv][jv]=J[ic][jc]+1;
			}
		}
		p++;
	}
	min=102;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if (R[i][j]!=0 && R[i][j]==J[i][j] && R[i][j]<min){
				tmin = R[i][j];
				imin = i;
				jmin = j;
			}
		}
	}
	fprintf(g, "%d %d %d", tmin, imin, jmin);
				
	
	
	
	fclose(f);
	fclose(g);
}