Cod sursa(job #520909)

Utilizator Tucu94Andrei Tuculanu Tucu94 Data 10 ianuarie 2011 19:06:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream.h>
int ri,rj,ic,jc,iv,jv,ji,jj;
int cr[2][10201],cj[2][10201];
int j[101][101],r[101][101];
char a[101][101];

int	u,p,d;
int n,m,i,k,w1,w2,max;

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

//vt
//int t[10201]; nu imi trebuie sper :-s

ifstream f ("rj.in");
ofstream g ("rj.out");

int main (){
max=25000000;
f>>n>>m;
f.get();
for(i=1;i<=n;i++){
	f.get(a[i],101);
	f.get();
	}
		
for(i=1;i<=n;i++)
	for(k=1;k<=m;k++){
		if(a[i][k-1]=='X'){
			r[i][k]=-1;
			j[i][k]=-1;}
		if(a[i][k-1]=='R'){
			ri=i;rj=k;
			r[i][k]=1;
		}
		if(a[i][k-1]=='J'){
			j[i][k]=1;
			ji=i;jj=k;
		}
	}
	
	p=1;u=1;
	cr[0][1]=ri;cr[1][1]=rj;
	while(p<=u){
		ic=cr[0][p];
		jc=cr[1][p];
		for(d=0;d<8;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			if(iv>0&&jv>0&&iv<n&&jv<m&&r[iv][jv]==0){
			u++;
			cr[0][u]=iv;
			cr[1][u]=jv;
			r[iv][jv]=r[ic][jc]+1;
			
			} 
			
		}
		p++;
	}

	p=1;u=1;
	cj[0][1]=ji;cj[1][1]=jj;
	while(p<=u){
		ic=cj[0][p];
		jc=cj[1][p];
		for(d=0;d<8;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			if(iv>0&&jv>0&&iv<=n&&jv<=m&&j[iv][jv]==0){
			u++;
			cj[0][u]=iv;
			cj[1][u]=jv;
			j[iv][jv]=j[ic][jc]+1;
			if(r[iv][jv]==j[iv][jv]&&j[iv][jv]<max){
				w1=iv;
				w2=jv;
				max=j[iv][jv];
				}
			}
			
		}
		p++;
	}

	g<<max<<' '<<w1<<' '<<w2;









return 0;
}