Cod sursa(job #123260)

Utilizator P1gl3TGilca Mircea Alexandru P1gl3T Data 15 ianuarie 2008 09:40:45
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
const signed char dl[]={1,1,0,-1,-1,-1,0,1}, dc[]={0,1,1,1,0,-1,-1,-1};
short int romeo[102][102], julieta[102][102];
struct pozitie{short int x,y;};
int main()
{
	FILE *in=fopen("rj.in","r"), *out=fopen("rj.out","w");
	int m,n,i,j,jx,jy,p=0,u=1,x,y,min=10010;
	pozitie c[10010];
	char e,l1,l2;
	fscanf(in,"%d%d ",&n,&m);
	for(i=1;i<=n;++i)
	{
		for(j=1;j<=m;++j)
		{
			fscanf(in,"%c",&e);
			if(e=='X')
				romeo[i][j]=julieta[i][j]=-1;
			if(e=='R')
			{
				julieta[i][j]=-1;
				romeo[i][j]=1;
				c[0].x=j;
				c[0].y=i;
			}
			if(e=='J')
			{
				romeo[i][j]=-1;
				julieta[i][j]=1;
				jx=j;
				jy=i;
			}
		}
		fscanf(in,"%c%c",&l1,&l2);
		romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=-1;
	}
	
	fclose(in);
	for(i=0;i<=m+1;++i)
		romeo[0][i]=romeo[n+1][i]=julieta[0][i]=julieta[n+1][i]=-1;
	
	while(p<=u-1)
	{
		x=c[p].x;
		y=c[p++].y;
		for(i=0;i<8;++i)
			if(romeo[y+dl[i]][x+dc[i]]==0)
			{
				c[u].x=x+dc[i];
				c[u].y=y+dl[i];
				++u;
				romeo[y+dl[i]][x+dc[i]]=romeo[y][x]+1;
			}
	}
	
	p=0;
	u=1;
	c[0].x=jx;
	c[0].y=jy;
	
	while(p<=u-1)
	{
		x=c[p].x;
		y=c[p++].y;
		for(i=0;i<8;++i)
			if(julieta[y+dl[i]][x+dc[i]]==0)
			{
				c[u].x=x+dc[i];
				c[u].y=y+dl[i];
				++u;
				julieta[y+dl[i]][x+dc[i]]=julieta[y][x]+1;
			}
	}
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			if(romeo[i][j]==julieta[i][j]&&romeo[i][j]!=-1&&romeo[i][j]!=0)
				if(romeo[i][j]<min)
				{
					min=romeo[i][j];
					x=j;
					y=i;
				}
	fprintf(out,"%d %d %d",min,y,x);
	fclose(out);
	return 0;
}