Cod sursa(job #80017)

Utilizator wefgefAndrei Grigorean wefgef Data 25 august 2007 13:22:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<stdio.h>
int i,j,n,m,inc1,inc2,sf1,sf2,nx,ny,k,l;
int dx[]={0,-1,-1,-1,+0,+1,+1,+1,+0};
int dy[]={0,-1,+0,+1,+1,+1,+0,-1,-1};
char sht,c[105][105];
int 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("%d %d\n",&n,&m);

	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
		{
			scanf("%c",&c[i][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;
		}
		scanf("%c",&sht);
	}

	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 (!mm[nx][ny] && nx>0 && nx<=n && ny>0 && ny<=m)
				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 (!mmm[nx][ny] && nx>0 && nx<=n && ny>0 && ny<=m)
			{
				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("%d %d %d\n",mm[nx][ny],nx,ny);return 0;}
			}
		}
		inc2++;
	}
	return 0;
}