Cod sursa(job #99960)

Utilizator florin.moldovanuFlorin M florin.moldovanu Data 11 noiembrie 2007 18:42:08
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
#include<values.h>
typedef struct {int lin,col;}RJ;
int main()
{
 RJ x,x1,y,C[10100];
 int a[100][101],b[100][101];
 char q;
 int i,j,n,m,d[8]={-1,-1,0,1,1,1,0,-1},e[8]={0,1,1,1,0,-1,-1,-1},p,u,min=MAXINT;
 FILE*f,*g;
 f=fopen("rj.in","r");
 g=fopen("rj.out","w");
 fscanf(f,"%d %d",&n,&m);
 for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		{fscanf(f,"%c",&q);
		 if(q!='\n') {if(q=='X') a[i][j]=-1;
			      else if(q==' ') a[i][j]=0;
			      b[i][j]=a[i][j];
			      if(q=='R') {x.lin=i;x.col=j;b[i][j]=0;a[i][j]=1;}
			      if(q=='J') {x1.lin=i;x1.col=j;b[i][j]=1;a[i][j]=b[i][j]-1;}}
		 else j--;}
 for(i=0;i<=n+1;i++)
	a[i][0]=b[i][0]=a[i][m+1]=b[i][m+1]=-1;
 for(j=0;j<=m+1;j++)
	a[0][j]=b[0][j]=a[n+1][j]=b[n+1][j]=-1;
 p=u=1;
 C[p]=x;
 a[x.lin][x.col]=1;
 while(p<=u)
	{x=C[p++];
	 for(i=0;i<=7;i++)
		{y.lin=x.lin+d[i];
		 y.col=x.col+e[i];
		 if(a[y.lin][y.col]==0) {a[y.lin][y.col]=a[x.lin][x.col]+1;
					   C[++u]=y;}
		 }
	}
 p=u=1;
 C[p]=x1;
 b[x1.lin][x1.col]=1;
 while(p<=u)
	{x1=C[p++];
	 for(i=0;i<=7;i++)
		{y.lin=x1.lin+d[i];
		 y.col=x1.col+e[i];
		 if(b[y.lin][y.col]==0) {b[y.lin][y.col]=b[x1.lin][x1.col]+1;
					   C[++u]=y;}
		}
	}
 for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	if((a[i][j]!=-1)&&(a[i][j]!=0))
		  if(a[i][j]==b[i][j]&&a[i][j]<min) {min=a[i][j];
						     p=i;
						     u=j;}
 fprintf(g,"%d\n",min);

 fclose(f);
 fclose(g);
 return 0;
}