Cod sursa(job #412699)

Utilizator dinuddinu dan dinud Data 5 martie 2010 21:35:34
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>

char x;
int R[102][102],J[102][102],ic,jc,iv,jv,ir,jr,ij,jj,m,n,i,j,k,isol,jsol,min,p,u;
int di[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int c[2][102*102];

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",&x);
			if(x=='R'){
				R[i][j]=-1;
				J[i][j]=-1;
				ir=i;
				jr=j;
			}
			if(x=='J'){
				R[i][j]=-2;
				J[i][j]=-2;
				ij=i;
				jj=j;
			}
			if(x=='X'){
				R[i][j]=-3;
				J[i][j]=-3;
			}
		}
		fscanf(f,"%c",&x);
	}
	
	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][1]=ir;
	c[1][1]=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][1]=ij;
	c[1][1]=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 = 1000;
	
	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){
				isol=i;
				jsol=j;
				min=R[i][j];
			}
	
	fprintf(g,"%d %d %d",min, isol, jsol);
	
	
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}