Cod sursa(job #498111)

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

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,"%c",&x);
	}
	
	
	c[0][1]=ri;
	c[1][1]=rj;
	rom[ri][rj]=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 && 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;
	jul[ji][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 && 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;
}