Cod sursa(job #93244)

Utilizator slayer4uVictor Popescu slayer4u Data 18 octombrie 2007 09:54:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
long i,j,n,m,inc1,inc2,sf1,sf2,nx,ny,k,l;
long dx[]={0,-1,-1,-1,+0,+1,+1,+1,+0};
long dy[]={0,-1,+0,+1,+1,+1,+0,-1,-1};
char sht,c[105][105];
long mm[105][105], mmm[105][105];

struct lol
{
	int x,y,t;
};
lol rom,jul,q1[12001],q2[12001];

int main()
{
	freopen ("rj.in","rt",stdin);
	freopen ("rj.out","wt",stdout);

	scanf("%ld %ld",&n, &m);
	fgets(c[0], 105, stdin);

	for (i = 0; i < n; i++)
	{
		fgets(c[i], 105, stdin);
		for (j = 0; j < m; j++)
		{
			if (c[i][j]=='R') rom.x=i,rom.y=j, mm[i][j]=1;
			else
			if (c[i][j]=='J') jul.x=i,jul.y=j,mmm[i][j]=1;
			else
			if (c[i][j]=='X') mm[i][j]=-1,mmm[i][j]=-1;
		}
	}

	inc1=sf1=1;
	q1[inc1].x=rom.x,q1[inc1].y=rom.y,q1[inc1].t=1;
	inc2=sf2=1;
	q2[inc2].x=jul.x,q2[inc2].y=jul.y,q2[inc2].t=1;
	
	while (sf1>=inc1)
	{
		for (i=1;i<=8;i++)
		{
			nx=q1[inc1].x+dx[i];
			ny=q1[inc1].y+dy[i];

			if (nx>=0 && nx<n && ny>=0 && ny<m && !mm[nx][ny])
				q1[++sf1].x=nx,q1[sf1].y=ny,q1[sf1].t=q1[inc1].t+1,mm[nx][ny]=q1[sf1].t;
		}
		inc1++;
	}
	
	while (sf2>=inc2)
	{
		for (i=1;i<=8;i++)
		{
			nx=q2[inc2].x+dx[i];
			ny=q2[inc2].y+dy[i];

			if (nx>=0 && nx<n && ny>=0 && ny<m && !mmm[nx][ny])
			{
				q2[++sf2].x=nx,q2[sf2].y=ny,q2[sf2].t=q2[inc2].t+1,mmm[nx][ny]=q2[sf2].t;

				if (mmm[nx][ny]==mm[nx][ny])
					{printf("%ld %ld %ld\n",mm[nx][ny],nx+1,ny+1);return 0;}
			}
		}
		inc2++;
	}
	return 0;
}