Cod sursa(job #79064)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 20 august 2007 18:49:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <cstdio>
#include <cstdlib>
#include <string>
const int vx[8]={0,1,0,-1,1,1,-1,-1};
const int vy[8]={1,0,-1,0,1,-1,1,-1};
int m,n,rx,ry,jx,jy;
int lrom[116][116];
int ljul[116][116];
char** ob;

void iofile(void)
{
	int i,j;
	int c;
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d",&m,&n);
	ob=(char **)malloc(m*sizeof(char *));
	for (i=0;i<m;i++)
	{
		ob[i]=(char *)malloc(n*sizeof(char));
	}
	c=getchar();
	for (i=0;i<m;i++)
		for (j=0;j<n;j++)
		{
			lrom[i][j]=-1;
			ljul[i][j]=-1;
		}
	for (i=0;i<m;i++)
	{
		fgets(ob[i],114,stdin);
	for (j=0;j<n;j++)
	{
		if (ob[i][j]=='R')
		{
			rx=i;
			ry=j;
		} else
		if (ob[i][j]=='J')
		{
			jx=i;
			jy=j;
		}
	}
	}
	fclose(stdin);
}


void lee(int xi,int yi, int a[][116])
{
	typedef struct
	{
		int x,y;
	} coord;
	coord c[10001];
	int b[101][101];
	int p,u,xx,yy,i,j;
	memset(b,0,sizeof(b));
	c[0].x=xi;
	c[0].y=yi;
	b[xi][yi]=1;
	p=u=0;
	a[xi][yi]=1;
	while (p<=u)
	{
		for (i=0;i<8;i++)
		{
			xx=c[p].x+vx[i];
			yy=c[p].y+vy[i];
			if ((xx>=0)&&(xx<m)&&(yy>=0)&&(yy<n)&&(ob[xx][yy]!='X')&&(b[xx][yy]==0))
			{
				u++;
				c[u].x=xx;
				c[u].y=yy;
				b[xx][yy]=1;
				a[xx][yy]=a[c[p].x][c[p].y]+1;
			}
		}
		p++;
	}
}

void con_lee(void)
{
	lee(rx,ry,lrom);
	lee(jx,jy,ljul);
}
void prel(void)
{
	int i,j,min,xmin,ymin;
	min=-1;
	xmin=0;
	ymin=0;
	for (i=0;i<m;i++)
		for (j=0;j<n;j++)
		{
			if ((lrom[i][j]!=-1)&&(ljul[i][j]!=-1))
			{
			if (lrom[i][j]==ljul[i][j])
			{
				if ((min==-1)||(lrom[i][j]<min))
				{
					min=lrom[i][j];
					xmin=i+1;
					ymin=j+1;
				}
			}
			}
		}
	printf("%d %d %d\n",min,xmin,ymin);
	fclose(stdout);
}

int main(void)
{
	iofile();
	con_lee();
	prel();
	return 0;
}