Cod sursa(job #413915)

Utilizator cnt_tstcont teste cnt_tst Data 9 martie 2010 13:18:32
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <stdio.h>
#include <string.h>
#define DIM 101

int di[] = {0,0,-1,1,-1,1,-1,1};
int dj[] = {1,-1,0,0,1,-1,-1,1};

char a[DIM][DIM],x;
int c[2][DIM*DIM];
//int cj[2][DIM*DIM];
int R[DIM][DIM];
int J[DIM][DIM];

int n,m;
int i,j,d,ii,ok;
int ic,jc,iv,jv,iMin,jMin,min,ir,jr,ij,jj;
//int icj,jcj,ivj,jvj;
int p,u;

int main(){
	
	FILE*f1=fopen("rj.in","r");
	fscanf(f1,"%d%d\n",&n,&m);
	for(i=1; i<=n; i++){
		for(j=1; j<=m; j++){
			fscanf(f1,"%c",&a[i][j]);
			if(a[i][j]=='R'){
				ir = i;
				jr = j;
			}
			if(a[i][j]=='J'){
				ij = i;
				jj = j;
			}
		}
		fscanf(f1,"%c",&x);
	}
	fclose(f1);
	
	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 + 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++;
	}
	
	
	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 + 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 = 10002;
	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) {
				min = R[i][j];
				iMin = i;
				jMin = j;
			}
	
	
	FILE*f2=fopen("rj.out","w");	
	fprintf(f2,"%d %d %d",min,iMin,jMin);
	fclose(f2);	
	
	return 0;
}