Cod sursa(job #673383)

Utilizator stanescu_teodorStanescu Teodor stanescu_teodor Data 4 februarie 2012 13:09:46
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdio.h>
#include <string.h>
#define inf 10000

const int dx[8]={-1,-1,0,1,1,1,0,-1};
const int dy[8]={0,1,1,1,0,-1,-1,-1};
struct nod {int l;int c;} q[10000];
int xr,yr,xj,yj,i,j,pozi,pozj,min,a[101][101],b[101][101],n,m;

void load ()
{char x;
	memset (a,-1,sizeof(a));
	memset (b,-1,sizeof(b));
	scanf ("%d %d\n",&n,&m);
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=m; j++)
		{
			scanf ("%c",&x);
			if (x==' ') {a[i][j]=inf; b[i][j]=inf;}
			else if (x=='R') {a[i][j]=1; b[i][j]=inf; xr=i; yr=j;}
			else if (x=='J') {b[i][j]=1; a[i][j]=inf; xj=i; yj=j;}
		}
	scanf ("%c",&x);
	}
}

void leer (int xi, int yi)
{int p,u,x,y;
	p=1; u=1; q[1].l=xi; q[1].c=yi;
	while (p<=u)
	{
		x=q[p].l;
		y=q[p].c;
		for (i=0; i<8; i++)
			if (a[x+dx[i]][y+dy[i]]==inf)
			{
				q[++u].l=x+dx[i];
				q[u].c=y+dy[i];
				a[x+dx[i]][y+dy[i]]=a[x][y]+1;
			}
		p++;
	}
}
void leej (int xi, int yi)
{int p,u,x,y;
	p=1; u=1; q[1].l=xi; q[1].c=yi;
	while (p<=u)
	{
		x=q[p].l;
		y=q[p].c;
		for (i=1; i<=8; i++)
			if (b[x+dx[i-1]][y+dy[i-1]]==inf)
			{
				q[++u].l=x+dx[i-1];
				q[u].c=y+dy[i-1];
				b[x+dx[i-1]][y+dy[i-1]]=b[x][y]+1;
			}
		p++;
	}
}

int main ()
{
	freopen ("rj.in","r",stdin);
	freopen ("rj.out","w",stdout);
	load ();
	leer (xr,yr);
	leej (xj,yj);
	min=inf;
	for (i=1; i<=n; i++)
		for (j=1; j<=m; j++)
		if (a[i][j]==b[i][j] && a[i][j]<min && a[i][j]!=-1) {min=a[i][j]; pozi=i; pozj=j;}
	printf ("%d %d %d",a[pozi][pozj],pozi,pozj);
}