Cod sursa(job #516925)

Utilizator soriynSorin Rita soriyn Data 27 decembrie 2010 04:30:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<stdio.h>
#include<string.h>

int vec[105][105],vec2[105][105],InC,SfC;
char buffer[105];

const int dx[9]={0,0,1,0,-1,1,-1,-1,1};
const int dy[9]={0,-1,0,1,0,1,1,-1,-1};
typedef struct 
{
	int l,c;
}Element;

typedef Element Coada[10100];
Coada C;
Element x,y;
int n=0,m=0,xr,yr,xj,yj;
char c;
void citeste()
{
	freopen("rj.in","r",stdin);
fgets(buffer,114,stdin);
int ok=0;
for(int i=0;i<=strlen(buffer)-2;i++)
{
	if(buffer[i]==' ') ok=1;
	else if(ok==0) n=n*10+(buffer[i]-'0');
	else if(ok==1) m=m*10+(buffer[i]-'0');
}
	for(int i=1;i<=n;i++){
		fgets(buffer,114,stdin);
		for(int j=1;j<=m;j++){
			if(buffer[j-1]=='R') xr=i,yr=j,vec[i][j]=1,vec2[i][j]=-1;
			if(buffer[j-1]=='J') xj=i,yj=j,vec[i][j]=-1,vec2[i][j]=1;
			if(buffer[j-1]==' ') vec[i][j]=-2,vec2[i][j]=-2;
			if(buffer[j-1]=='X') vec2[i][j]=-1,vec[i][j]=-1;
		}
		
	
	}
}

void lee()
{
	x.l=xr,x.c=yr;
	int k;
	InC=SfC=0;
	C[InC]=x;
	while(InC<=SfC)
	{
		x=C[InC++];
		for(k=1;k<=8;k++)
		{
			y.l=x.l+dx[k],y.c=x.c+dy[k];
			if(vec[y.l][y.c]==-2)
			{
				vec[y.l][y.c]=vec[x.l][x.c]+1;
				C[++SfC]=y;
			}
		}
	}
}

void lee2()
{
	x.l=xj,x.c=yj;
	int k;
	InC=SfC=0;
	C[InC]=x;
	while(InC<=SfC)
	{
		x=C[InC++];
		for(k=1;k<=8;k++)
		{
			y.l=x.l+dx[k],y.c=x.c+dy[k];
			if(vec2[y.l][y.c]==-2)
			{
				vec2[y.l][y.c]=vec2[x.l][x.c]+1;
				C[++SfC]=y;
			}
		}
	}
}
int main()
{
	citeste();
	lee();
	lee2();
	int min=12000,xmin,ymin;
	freopen("rj.out","w",stdout);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			if(vec[i][j]>=0 && vec[i][j]==vec2[i][j])
				if(vec[i][j]<min) min=vec[i][j],xmin=i,ymin=j;
		}
 
	printf("%d %d %d",min,xmin,ymin);
}