Cod sursa(job #156937)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 12 martie 2008 19:59:15
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.39 kb
#include<stdio.h>


int a[101][101],n,m,i,rx,ry,jx,jy,j,l,lj,x1,x2,y1,y2,r1,r2;
char c;

int max(int a, int b)
{
	if (a>b) return a;
	else	return b;
}

void rezolvare()
{int qr[5000][2],qj[5000][2];
	a[rx][ry]=1;
	a[jx][jy]=2;
	for (i=1;i<=n;i++)
		a[i][0]=-1,a[i][m+1]=-1;
	for (i=1;i<=m;i++)
		a[0][i]=-1,a[n+1][i]=-1;

	qr[1][0]=rx;qr[1][1]=ry;
	qj[1][0]=jx;qj[1][1]=jy;

	for (i=1,l=1,lj=1;;i++)
	{
		x1=qr[i][0],y1=qr[i][1];
		x2=qj[i][0],y2=qj[i][1];
		r1=a[x1][y1]/10;
		r2=a[x2][y2]/10;

		if (a[x1][y1+1]%10==2)
			{printf("%d %d %d\n",max(r1+1,a[x1][y1+1]/10),x1,y1+1);
			break;}
		else
		if (a[x1][y1+1]==0)
			{qr[++l][0]=x1;qr[l][1]=y1+1;a[x1][y1+1]=(r1+1)*10+1;}

		if (a[x1][y1-1]%10==2)
			{printf("%d %d %d\n",max(r1+1,a[x1][y1-1]/10),x1,y1-1);
			break;}
		else
		if (a[x1][y1-1]==0)
			{qr[++l][0]=x1;qr[l][1]=y1-1;a[x1][y1-1]=(r1+1)*10+1;}

		if (a[x1+1][y1]%10==2)
			{printf("%d %d %d\n",max(r1+1,a[x1+1][y1]/10),x1+1,y1);break;}
		else
		if (a[x1+1][y1]==0)
			{qr[++l][0]=x1+1;qr[l][1]=y1;a[x1+1][y1]=(r1+1)*10+1;}

		if (a[x1-1][y1]%10==2)
			{printf("%d %d %d\n",max(r1+1,a[x1-1][y1]/10),x1-1,y1);break;}
		else
		if (a[x1-1][y1]==0)
			{qr[++l][0]=x1-1;qr[l][1]=y1;a[x1-1][y1]=(r1+1)*10+1;}




		if (a[x2][y2+1]%10==1)
			{printf("%d %d %d\n",max(r2+1,a[x2][y2+1]/10),x2,y2+1);
			break;}
		else
		if (a[x2][y2+1]==0)
			{qj[++lj][0]=x2;qj[lj][1]=y2+1;a[x2][y2+1]=(r2+1)*10+2;}

		if (a[x2][y2-1]%10==1)
			{printf("%d %d %d\n",max(r2+1,a[x2][y2-1]/10),x2,y2-1);
			break;}
		else
		if (a[x2][y2-1]==0)
			{qj[++lj][0]=x2;qj[lj][1]=y2-1;a[x2][y2-1]=(r2+1)*10+2;}

		if (a[x2+1][y2]%10==1)
			{printf("%d %d %d\n",max(r2+1,a[x2+1][y2]/10),x2+1,y2);break;}
		else
		if (a[x2+1][y2]==0)
			{qj[++lj][0]=x2+1;qj[lj][1]=y2;a[x2+1][y2]=(r2+1)*10+2;}

		if (a[x2-1][y2]%10==1)
			{printf("%d %d %d\n",max(r2+1,a[x2-1][y2]/10),x2-1,y2);break;}
		else
		if (a[x2-1][y2]==0)
			{qj[++lj][0]=x2-1;qj[lj][1]=y2;a[x2-1][y2]=(r2+1)*10+2;}

	}
}

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;j++)
		  {
                  	scanf("%c",&c);
			if (c=='X') a[i][j]=-1;
			else
			if (c=='R') rx=i,ry=j;
			else
			if (c=='J') jx=i,jy=j;
			else
				a[i][j]=0;
		  }
                  scanf("%c",&c);
	}

	rezolvare();

	return 0;
}