Cod sursa(job #365704)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 19 noiembrie 2009 18:29:37
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <string.h>

int v[101][101],lee[2][10001],o[8],u[8],ok;

int main()
{
	int n,m,i,j,l=0,r=1,nx,ny;
	char a[3],str[102];
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d\n",&n,&m);
	for (i=1;i<n+1;i++)
	{
		fgets(str,102,stdin);
		for (j=0;j<m;j++)
		{
		 if (str[j]=='X') v[i][j+1]=10001;
		 else if (str[j]=='R')
		 {
		  lee[0][1]=i;
		  lee[1][1]=j+1;
		  v[i][j+1]=1;
		 }
		 else if (str[j]=='J')
		 {
		  lee[0][2]=i;
		  lee[1][2]=j+1;
		  v[i][j+1]=-1;
		 }
		}
	}
	o[0]=-1;o[1]=-1;o[2]=-1;o[5]=1;o[6]=1;o[7]=1;
	u[0]=-1;u[3]=-1;u[5]=-1;u[2]=1;u[4]=1;u[7]=1;
	while ((l<r)&&(ok==0))
	{
		++l;
		for (i=0;i<8;i++)
		{
			nx=lee[0][l]+o[i];
			ny=lee[1][l]+u[i];
			if ((0<nx)&&(nx<n+1)&&(ny>0)&&(ny<m+1)&&(v[nx][ny]==0))
			{
			 ++r;
			 lee[0][r]=nx;
			 lee[1][r]=ny;
			 if (v[lee[0][l]][lee[1][l]]>0) v[nx][ny]=v[lee[0][l]][lee[1][l]]+1;
			 else v[nx][ny]=v[lee[0][l]][lee[1][l]]-1;
			}
			else if ((0<nx)&&(nx<n+1)&&(ny>0)&&(ny<m+1)&&(v[nx][ny]+v[lee[0][l]][lee[1][l]]==0)) {ok=1;break;}
		}
	}
	printf("%d%c%d%c%d",v[nx][ny],' ',nx,' ',ny);
	return 0;
}