Cod sursa(job #1291047)

Utilizator test9cosmin Macovei test9 Data 12 decembrie 2014 07:07:30
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
    #include<fstream>
    using namespace std;
    ifstream f("rj.in");
    ofstream g("rj.out");
    struct structura{
		int i,j;
	};
    const int dx[] = { -1 , -1 , 0 , 1 , 1 ,  1 ,  0 , -1 } ;
    const int dy[] = {  0 ,  1 , 1 , 1 , 0 , -1 , -1 , -1 } ;
	int n,m,i,j,a[101][101],b[101][101],mini=1000000000;
	char c;
	structura Q[10001];
	structura ju;
	structura ro;
	structura result;
	int cifra(char c){
		if(c>='0' && c<='9') return 1;
		return 0;
	}
int main(){
		c=f.get();
		while(c!=' '){
			n=n*10+(c-'0');
			c=f.get();
		}
		c=f.get();
		while(c!='\n'){
			if(cifra(c)) m=m*10+(c-'0');
			c=f.get();
		}
		for(i=1;i<=n;++i){
			j=0;
			c=' ';
			while(j<=m){
				c=f.get();
				++j;
				if(c=='X'){
					a[i][j]=-1;
					b[i][j]=-1;
				}
				else
				if(c=='R'){
					b[i][j]=1;
					a[i][j]=-1;
					ro.i=i;
					ro.j=j;
				}
				else
				if(c=='J'){
					a[i][j]=1;
					ju.i=i;
					ju.j=j;
					b[i][j]=-1;
				}
			}
			while(c!='\n' && i<n) c=f.get();
		}
		Q[0]=ju;
		a[ju.i][ju.j]=1;
		for(int st=0,dr=1;st<=dr;++st){
			structura ret=Q[st];
			for(int k=0;k<8;++k){
				structura acm=ret;
				acm.i+=dx[k];
				acm.j+=dy[k];
				if(acm.i>0 && acm.i<=n && acm.j>0 && acm.j<=m){
				    if(a[acm.i][acm.j]==0){
						Q[++dr]=acm;
						a[acm.i][acm.j]=a[ret.i][ret.j]+1;
					}
				}
			}
		}
		Q[0]=ro;
		b[ro.i][ro.j]=1;
		for(int st=0,dr=1;st<=dr;++st){
			structura ret=Q[st];
			for(int k=0;k<8;++k){
				structura acm=ret;
				acm.i+=dx[k];
				acm.j+=dy[k];
				if(acm.i>0 && acm.i<=n && acm.j>0 && acm.j<=m){
				    if(b[acm.i][acm.j]==0){
						Q[++dr]=acm;
						b[acm.i][acm.j]=b[ret.i][ret.j]+1;
					}
				}
			}
		}
		for(i=1;i<=n;++i)
			for(j=1;j<=m;++j)
				if(a[i][j]==b[i][j] && a[i][j]>0 && b[i][j]>0){
					if(mini>a[i][j]){
						result.i=i;
						result.j=j;
						mini=a[i][j];
					}
				}
		g<<mini<<' '<<result.i<<' '<<result.j<<'\n';
		g.close();
		return 0;
	}