Cod sursa(job #403400)

Utilizator evaluatoreval uator evaluator Data 24 februarie 2010 22:00:03
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<cstdio>
char s[103];
int min=9999999,xf,yf,r[101][101],ju[101][101],n,m,p,u,q[2][101],xr,yr,xj,yj,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
void push(int x, int y)
{
	q[0][u]=x;
	q[1][u]=y;
	++u;
}
void pop()
{
	++p;
}
bool empty()
{
	return p>u;
}
int xfront()
{
	return q[0][p];
}
int yfront()
{
	return q[1][p];
}
void vecr(int x, int y)
{
	for(int i=0;i<4;++i)
	{
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(xx>=0&&xx<n&&yy>=0&&yy<m&&r[xx][yy]==0)
		{
			push(xx,yy);
			r[xx][yy]=r[x][y]+1;
		}
	}
}
void vecju(int x, int y)
{
	for(int i=0;i<4;++i)
	{
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(xx>=0&&xx<n&&yy>=0&&yy<m&&ju[xx][yy]==0)
		{
			push(xx,yy);
			ju[xx][yy]=ju[x][y]+1;
		}
	}
}
int main()
{
	int i,j;
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d",&n,&m);
	fgets(s,101,stdin);
	for(i=0;i<n;++i)
	{
		fgets(s,101,stdin);
		for(j=0;j<m;++j)
			if(s[j]=='X') 
			{
				r[i][j]=-1;
				ju[i][j]=-1;
			}
			else if(s[j]=='R')
				{
					xr=i;
					yr=j;
				}
				else if(s[j]=='J')
					{
					xj=i;
					yj=j;
					}
	}
	push(xr,yr);
	r[xr][yr]=1;
	while(!empty())
	{
		int x=xfront();
		int y=yfront();
		vecr(x,y);
		pop();
	}
	p=0;
	u=0;
	push(xj,yj);
	ju[xj][yj]=1;
	while(!empty())
	{
		int x=xfront();
		int y=yfront();
		vecju(x,y);
		pop();
	}
	for(i=0;i<n;++i)
		for(j=0;j<m;++j)
			if(r[i][j]>0&&r[i][j]==ju[i][j]&&min>r[i][j]-1)
			{
				min=r[i][j]-1;
				xf=i+1;
				yf=j+1;
			}
	printf("%d %d %d",xf,yf,min);
	return 0;
}