Cod sursa(job #343773)

Utilizator irene_mFMI Irina Iancu irene_m Data 27 august 2009 12:13:44
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <cstdio>
char h[105][105];
int a[105][105],n,m,xr,yr,xj,yj,b[105][105],dx[9]={0,0,1,0,-1,1,1,-1,-1},dy[9]={0,1,0,-1,0,1,-1,-1,1};
char x[10009],y[10009];

void cit()
{
	int i,j;
	char q;
	freopen("rj.in","r",stdin);
	scanf("%d%d%c",&n,&m,&q);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%c",&h[i][j]);
			if(h[i][j]=='R')
			{
				xr=i; yr=j;
			}
			if(h[i][j]=='J')
			{
				xj=i; yj=j;
			}
		}
		scanf("%c",&q);
	}
}

void leer()
{
	int l,xi,yi,d,st=1,dr=1;
	x[1]=xr; y[1]=yr;
	b[xr][yr]=1;
	while(st<=dr)
	{
		d=b[x[st]][y[st]]+1;
		for(l=1;l<=8;l++)
		{
			xi=x[st]+dx[l]; yi=y[st]+dy[l];
			if(xi<=n && xi>=1 && yi<=m && yi>=1)
				if((b[xi][yi]==0 || b[xi][yi]>d) && h[xi][yi]!='X')
				{
					dr++;
					x[dr]=xi; y[dr]=yi;
					b[xi][yi]=d;
				}
		}
		st++;
	}
}

void leej()
{
	int l,xi,yi,d,st=1,dr=1;
	x[1]=xj; y[1]=yj;
	a[xj][yj]=1;
	while(st<=dr)
	{
		d=a[x[st]][y[st]]+1;
		for(l=1;l<=8;l++)
		{
			xi=x[st]+dx[l]; yi=y[st]+dy[l];
			if(xi<=n && xi>=1 && yi<=m && yi>=1)
				if((a[xi][yi]==0 || a[xi][yi]>d) && h[xi][yi]!='X')
				{
					dr++;
					x[dr]=xi; y[dr]=yi;
					a[xi][yi]=d;
				}
		}
		st++;
	}
}

void afis(int x,int y,int tmin)
{
	freopen("rj.out","w",stdout);
	printf("%d %d %d",tmin,x,y);
}

void minim()
{
	int i,j,min=10000,p,q;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]!=0 && a[i][j]==b[i][j] && a[i][j]<min)
			{
				p=i; q=j;
				min=a[i][j];
			}
	afis(p,q,min);
}

int main()
{
	cit();
	leer();
	leej();
	minim();
	return 0;
}