Cod sursa(job #245238)

Utilizator nobody92carjan radu nobody92 Data 17 ianuarie 2009 13:25:22
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<stdio.h>
#include<values.h>
#define M 106
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");

char a[M][M];
int  b[M][M],c[M][M],n,m,ij,jj,ir,jr,cx[10010],cy[10010],xn,yn,p,u,x,y;
int  dx[]={0,-1,-1,0,1,1,1,0,-1};
int  dy[]={0,0,1,1,1,0,-1,-1,-1};


int main()
{char d;

 int i,j,tmin=MAXINT;

 fscanf(f,"%d%d%c",&n,&m,&d);

 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
	{fscanf(f,"%c",&a[i][j]);

	  if(a[i][j]=='X') {b[i][j]=-1;
				              c[i][j]=-1;}

	  else if(a[i][j]==' ') {b[i][j]=0;
				                    c[i][j]=0;}

			 else if(a[i][j]=='R') {ir=i;
						                   jr=j;
						                   b[i][j]=1;
						                   c[i][j]=0;}

			 else if(a[i][j]=='J') {ij=i;
						                   jj=j;
						                   c[i][j]=1;
						                   b[i][j]=0;}

			  else if(a[i][j]=='\n') if(i==n&&j==m) j++;
						 else j--;
	  }


  fclose(f);

 p=u=1;
 cx[u]=ir;
 cy[u]=jr;

 b[ir][jr]=1;

 while(p<=u)
 {x=cx[p];
  y=cy[p];

  for(i=1;i<=8;i++)
    {xn=x+dx[i];
     yn=y+dy[i];
     if(xn>0 && yn>0 && xn<=n && yn<=m)
         if(b[xn][yn]==0)
            {b[xn][yn]=b[x][y]+1;
             cx[++u]=xn;
             cy[u]=yn;
             }
          
     }
  p++;
  }

 p=u=1;
 cx[u]=ij;
 cy[u]=jj;

 c[ij][jj]=1;

 while(p<=u)
 {x=cx[p];
  y=cy[p];

  for(i=1;i<=8;i++)
    {xn=x+dx[i];
     yn=y+dy[i];
     if(xn>0 && yn>0 && xn<=n && yn<=m)
         if(c[xn][yn]==0)
            {c[xn][yn]=c[x][y]+1;
             cx[++u]=xn;
             cy[u]=yn;
             }
          
     }

  p++;
  }

 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
	if(b[i][j]==c[i][j]&&b[i][j]!=-1&&b[i][j]!=1) if(b[i][j]<tmin) {tmin=b[i][j];
						ir=i;
						jr=j;
					  }

 fprintf(g,"%d %d %d",tmin,ir,jr);


 fprintf(g,"\n");


  fclose(g);
return 0;
}