Cod sursa(job #811569)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 12 noiembrie 2012 17:44:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
int N,M,XR,YR,XJ,YJ;
bool a[110][110];
int di[8]={-1,-1,-1,0,1,1,1,0};
int dj[8]={-1,0,1,1,1,0,-1,-1};

struct coada{
	int i;
	int j;
	int d;
	int o;
};
coada C[110*110];

int main(void){
	register int i,j,ch;
	
	fscanf(f,"%d %d\n",&N,&M);
	for(i=1;i<=N;i++){
		for(j=1;j<=M;j++){
			fscanf(f,"%c",&ch);
			if(ch!=' ')
				a[i][j]=true;
			if(ch=='R')
				XR=i,YR=j;
			else if(ch=='J')
				XJ=i,YJ=j;
		}
		fscanf(f,"\n");
	}
	
	int p,u,d,iv,jv;
	bool ok=false;
	p=u=1;
	C[p].i=XR;
	C[p].j=YR;
	C[p].d=1;
	while(p<=u){
		for(d=0;d<8;d++){
			iv=C[p].i+di[d];
			jv=C[p].j+dj[d];
			if(iv>=1 && iv<=N && jv>=1 && jv<=M && !a[iv][jv])
				C[++u].i=iv,C[u].j=jv,C[u].d=C[p].d+1,C[u].o=p,a[iv][jv]=true;
			if(iv>=1 && iv<=N && jv>=1 && jv<=M && iv==XJ && jv==YJ){
					C[++u].i=iv,C[u].j=jv,C[u].d=C[p].d+1,C[u].o=p;
					ok=true;
					break;
			}
		}
		if(ok)
			break;
		p++;
	}
	
	d=(C[u].d+1)/2;
	fprintf(g,"%d ",d);
	int t=1;
	while(t<d){
		u=C[u].o;
		t++;
	}
	fprintf(g,"%d %d",C[u].i,C[u].j);
	fclose(f);
	fclose(g);
	return 0;
}