Cod sursa(job #560445)

Utilizator Balmus_MaximBalmus Maximilian Balmus_Maxim Data 18 martie 2011 14:58:27
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <stdio.h>

int n,m,i,j,vr[110][110],vj[110][110],iv,jv,vf[110][110],ll,cc,minn=10000,tmin=100000; 
char vin[110][110];

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

struct coada{
	int i,j,c;
};

coada cr[10010],cj[10010],a;

int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d\n",&n,&m);
	for(i=1;i<=n;i++){
		for(j=1;j<=m+1;j++){
			scanf("%c",&vin[i][j]);
			//printf("%c",vin[i][j]);
			if(vin[i][j]=='R'){
				vr[i][j]=1;
				cr[1].i=i;
				cr[1].j=j;
				cr[1].c=1;
			}
			if(vin[i][j]=='J'){
				vj[i][j]=1;
				cj[1].i=i;
				cj[1].j=j;
				cj[1].c=1;
			}
			if(vin[i][j]==' '){
				vr[i][j]=vj[i][j]=32000;
			}
			if(vin[i][j]=='X'){
				vr[i][j]=vj[i][j]=-1;
			}
		}
		//scanf("\n");
		//printf("\n");
	}
	int in=1,sf=2;
	while(in<sf){
		a=cr[in];
		in++;
		for(i=1;i<=8;i++){
			iv=a.i+di[i];
			jv=a.j+dj[i];
			if(0<iv && iv<=n && 0<jv && jv<=m && vr[iv][jv]!=-1 && a.c+1<vr[iv][jv]){
				vr[iv][jv]=a.c+1;
				cr[sf].i=iv;
				cr[sf].j=jv;
				cr[sf].c=a.c+1;
				sf++;
			}
		}
	}
	in=1,sf=2;
	while(in<sf){
		a=cj[in];
		in++;
		for(i=1;i<=8;i++){
			iv=a.i+di[i];
			jv=a.j+dj[i];
			if(0<iv && iv<=n && 0<jv && jv<=m && vj[iv][jv]!=-1 && a.c+1<vj[iv][jv]){
				vj[iv][jv]=a.c+1;
				cj[sf].i=iv;
				cj[sf].j=jv;
				cj[sf].c=a.c+1;
				sf++;
			}
		}
	}
	/*for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			printf("%d ",vj[i][j]);
		}
		printf("\n");
	}*/
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(vr[i][j]==vj[i][j] && vr[i][j]!=-1 && vr[i][j]!=32000){
				tmin=vr[i][j];
				ll=i;
				cc=j;
			}
		}
	}
	printf("%d %d %d",tmin,ll,cc);
	return 0;
}