Cod sursa(job #549806)

Utilizator crushackPopescu Silviu crushack Data 8 martie 2011 22:42:03
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <string.h>
#define lung 100


const int d[8][2]= { {-1,-1} , {-1,0} , {-1,1} , {0,-1} , {0,1} , {1,-1} , {1,0}, {1,1} };
struct coada
{int x,y;} c[lung*lung],ro,ju;
char s[lung+5];
int a[lung][lung],n,m,l;
int jul[lung][lung];

void Lee(int,int);

int main()
{
	int i,j; char ch;
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d\n",&n,&m);
	for (i=0;i<n;i++)
	{
		gets(s);
		for (j=0;j<m;j++)
		{
			if (s[j]=='X')
				a[i][j]=jul[i][j]=-1;
			else
				a[i][j]=jul[i][j]=0;
			if (s[j]=='R')
				ro.x=i,ro.y=j;
			if (s[j]=='J')
				ju.x=i,ju.y=j;
		}
	}
	
	Lee(ro.x,ro.y);
	for (i=0;i<n;i++)
		for (j=0;j<m;j++)
		{
			a[i][j]=jul[i][j];
			if (jul[i][j]!=-1)
				jul[i][j]=0;
		}
	Lee(ju.x,ju.y);
	
	for (i=0;i<l;i++)
		if ( a[ c[i].x ][ c[i].y]==jul[ c[i].x ][ c[i].y] )
			break;
	printf("%d %d %d\n",a[ c[i].x ][ c[i].y],c[i].x+1,c[i].y+1);
	return 0;
}

void Lee(int a,int b)
{
	int i,j;
	l=1;
	c[0].x=a;
	c[0].y=b;
	jul[a][b]=1;
	for (i=0;i<l;i++)
		for (j=0;j<8;j++)
		{
			int x=d[j][0]+c[i].x;
			int y=d[j][1]+c[i].y;
			if (x>=0 && x<n && y>=0 && y<m && !jul[x][y])
			{
				c[l].x=x,c[l].y=y; jul[x][y]=jul[ c[i].x ][ c[i].y ]+1;
				l++;
			}
		}
}