Cod sursa(job #498106)

Utilizator vladcatrinaVlad Catrina vladcatrina Data 4 noiembrie 2010 07:59:41
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
int di[4] = {0,0,1,-1};
int dj[4] = {1,-1,0,0};

FILE*f = fopen("rj.in","r");
FILE*g = fopen("rj.out","w");

char v[102][102],x;
int rom[102][102],jul[102][102];
int c[3][102*102];
int ri,rj,ji,jj;
int i,j,n,m,p,u,d,ic,iv,jc,jv,min,imin,jmin;

int main(){
	
	fscanf(f,"%d %d\n",&n,&m);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			fscanf(f,"%c",&v[i][j]);
			if(v[i][j]=='R'){
				ri=i, rj=j;
			}
			if(v[i][j]=='J'){
				ji=i, jj=j;
			}
		}
		fscanf(f,"\n");
	}
	
	
	c[0][1]=ri;
	c[1][1]=rj;
	p=u=1;
	while(p<=u){
		ic=c[0][p];
		jc=c[1][p];
		for(d=0;d<=3;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			if(iv>=1 && iv<=n && jv<=m && v[iv][jv]!='X' && rom[iv][jv]==0){
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				rom[iv][jv]=rom[ic][jc]+1;
			}
		}
		p++;
	}
	
	c[0][1]=ji;
	c[1][1]=jj;
	p=u=1;
	while(p<=u){
		ic=c[0][p];
		jc=c[1][p];
		for(d=0;d<=3;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			if(iv>=1 && iv<=n && jv<=m && v[iv][jv]!='X' && jul[iv][jv]==0){
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				jul[iv][jv]=jul[ic][jc]+1;
			}
		}
		p++;
	}
	min=10003;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if (rom[i][j]!=0 && rom[i][j]==jul[i][j] && rom[i][j]<min){
                min = rom[i][j];
                imin = i;
                jmin = j;
            }
        }
    }
	
	fprintf(g,"%d %d %d",min,imin,jmin);
	
	fclose(f);
	fclose(g);
	return 0;
}