Cod sursa(job #818928)

Utilizator avramavram andrei marius avram Data 18 noiembrie 2012 12:26:56
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>
int i,j,n,m,ic,iv,jc,jv,a[101][101],rm[101][101],jm[101][101],s,mini,x1,x2,y1,y2,p,u,d,c[2][10000];
char q;
int d1[]={0,0,1,-1};
int d2[]={-1,1,0,0};
int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d\n",&n,&m);
	mini=999999;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%c",&q);
			if(q=='X')
				a[i][j]=-1;
			if(q==' ')
				a[i][j]=-2;
			if(q=='R')
				{x1=i;y1=j;a[i][j]=0;}
			if(q=='J')
				{x2=i;y2=j;a[i][j]=0;}
		}
		scanf("%c",&q);
	}
	p=u=1;
	c[0][1]=x1;
	c[1][1]=y1;
	while(p<=u)
	{
		ic=c[0][p];
		jc=c[1][p];
		for(d=0;d<=3;d++)
		{
			iv=ic+d1[d];
			jv=jc+d2[d];
			if(jv>0&&iv>0&&jv<=m&&iv<=n&&a[iv][jv]==-2&&rm[iv][jv]==0)
			{
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				rm[iv][jv]=rm[ic][jc]+1;
			
			}
			
		}
		p++;
	}
	p=u=1;
	c[0][1]=x2;
	c[1][1]=y2;
	while(p<=u)
	{
		ic=c[0][p];
		jc=c[1][p];
		for(d=0;d<=3;d++)
		{
			iv=ic+d1[d];
			jv=jc+d2[d];
			if(jv>0&&iv>0&&jv<=m&&iv<=n&&a[iv][jv]==-2&&jm[iv][jv]==0)
			{
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				jm[iv][jv]=jm[ic][jc]+1;
			
			}
			
		}
		p++;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(rm[i][j]==jm[i][j]&&rm[i][j]<mini&&rm[i][j]>0)
			{
				mini=rm[i][j];
				x1=i;
				x2=j;
			}
		}
		
	}
	printf("%d %d %d",mini,x1,x2);
	return 0;
}