Cod sursa(job #799853)

Utilizator Kira96Denis Mita Kira96 Data 20 octombrie 2012 11:06:31
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<stdio.h>
int min,c1,c2,i,m,n,r[102][102],j[102][102],rx,nr,nr1,ry,jx,jy,p,u,xc,yc,k;
char v[102][102],car;
struct eu
{
	int x,y;
}c[10004];
int dx[]={0,-1,0,1,0,1,1,-1,-1};
int dy[]={0,0,1,0,-1,1,-1,1,-1};
int main ()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
	{
		scanf("%c",&car);
		for(k=1;k<=m;++k)
		{
			scanf("%c",&v[i][k]);
			if(v[i][k]==' ')
				++nr;
			if(v[i][k]=='R')
				{rx=i;ry=k;}
				else
					if(v[i][k]=='J')
					{jx=i;jy=k;}
		}
	}
	++nr;
	p=u=1;
	c[1].x=rx;
	c[1].y=ry;
	r[rx][ry]=1;
	xc=rx;
	yc=ry;
	nr1=0;
	while(p<=u)
	{
		for(i=1;i<=8;++i)
		{
			xc=c[p].x+dx[i];
			yc=c[p].y+dy[i];
			if(xc>0&&xc<=n&&yc>0&&yc<=m)
			if(v[xc][yc]!='X'&&r[xc][yc]==0)
			{
				c[++u].x=xc;
				c[u].y=yc;
				r[xc][yc]=r[c[p].x][c[p].y]+1;
				nr1++;
				
			}
			if(v[xc][yc]=='J')
			{
				p=u+1;
				break;
			}
			
		}
		p++;
	}
	p=u=1;
	c[1].x=jx;
	c[1].y=jy;
	j[jx][jy]=1;
	xc=jx;
	yc=jy;
	nr1=0;
	while(p<=u)
	{
		for(i=1;i<=8;++i)
		{
			xc=c[p].x+dx[i];
			yc=c[p].y+dy[i];
			if(xc>0&&xc<=n&&yc>0&&yc<=m)
			if(v[xc][yc]!='X'&&j[xc][yc]==0)
			{
				c[++u].x=xc;
				c[u].y=yc;
				j[xc][yc]=j[c[p].x][c[p].y]+1;
				++nr1;
			}
			if(v[xc][yc]=='R')
				{
					p=u+1;
					break;
			}
		}
		p++;
	}
	if(rx==jx&&jy==ry)
	{
		printf("%d %d %d",0,rx,ry);
		return 0;
	}
	min=9999999;
	for(i=1;i<=n;++i)
		for(k=1;k<=m;++k)
		{
			if(r[i][k])
				if(r[i][k]==j[i][k])
					if(r[i][k]<min)
					{
						min=r[i][k];
						c1=i;
						c2=k;
					}
		}
	printf("%d %d %d",min,c1,c2);
	return 0;
}