Cod sursa(job #360794)

Utilizator petroMilut Petronela petro Data 1 noiembrie 2009 22:40:30
Problema Rj Scor 0
Compilator cpp Status done
Runda CNRV #4 Marime 1.52 kb
#include<stdio.h>
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");

#define M 101
int r[M][M],jj[M][M],m,n,rx,ry,jx,jy;
int dx[8]={0,0,-1,1,-1,-1,1,1};
int dy[8]={-1,1,0,0,-1,1,-1,1};

void cit()
{
	int i,j;
	char c;
	
	fscanf(f,"%d%d%c",&n,&m,&c);
	
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			fscanf(f,"%c",&c);
			if(c=='R') {r[i][j]=1;
			            rx=i;
			            ry=j; 
			            jj[i][j]=32700;}
			else if(c=='J') {jj[i][j]=1;
			                 jx=i;
			                 jy=j;
			                 r[i][j]=32700;}
			     else if(c=='X') r[i][j]=jj[i][j]=-1;
			          else r[i][j]=jj[i][j]=32700;
		}
		fscanf(f,"%c",&c);
	}
	
	fclose(f);
}

void lee(int a[M][M],int x, int y)
{
	int p,u,i,j,x0,y0,cx[M*M],cy[M*M];
	p=u=1;
	cx[p]=x;
	cy[p]=y;
	a[x][y]=0;
	
	while(p<=u)
	{
		x=cx[p];
		y=cy[p];
		
		for(i=0;i<=8;i++)
		{
			x0=x+dx[i];
			y0=y+dy[i];
			
			if(x0 && y0 && x0<=n && y0<=m) if(a[x][y]+1<a[x0][y0]) {u++;
			                                                        cx[u]=x0;
			                                                        cy[u]=y0;
																	a[x0][y0]=a[x][y]+1;}
		}
		p++;
	}
}


int main()
{
	cit();
	lee(r,rx,ry);
	lee(jj,jx,jy);
	
	int i,j,min=32700;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(r[i][j]==jj[i][j] && r[i][j]<min && r[i][j]!=-1) {min=r[i][j];
                                                                 rx=i;ry=j;}
			
	fprintf(g,"%d %d %d\n",min,rx,ry);
		
	return 0;
}