Cod sursa(job #134888)

Utilizator lamez0rBogdan Bondor lamez0r Data 12 februarie 2008 16:29:23
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2 kb
#include<stdio.h>
char a[100][100];
int n,m,r[100][100],j[100][100];

int main ()
{
//clrscr();
int sf,inc,x,y,min=10000,k,xr,yr,xj,yj,i,cx[100],cy[100],dx[]={-1,-1,-1,0,0,1,1,1},dy[]={-1,0,1,-1,1,-1,0,1};
FILE *f;
f=fopen("4-rj.in","r");
fscanf(f,"%d%d",&n,&m);
//fgetc(f);
for (i=1;i<=n;++i)
    {
    fscanf(f,"%*c");
    for (k=1;k<=m;++k)
	{
	fscanf(f,"%c",&a[i][k]);
	if (a[i][k]=='R')
	   {
	   xr=i;
	   yr=k;
	   }
	if (a[i][k]=='J')
	   {
	   xj=i;
	   yj=k;
	   }
//	fgetc(f);
	}
    }
fclose(f);
/*
for (i=1;i<=n;++i)
    {
    for (k=1;k<=m;k++)
	printf("%c",a[i][k]);
    printf("\n");
    }
*/
for (i=1;i<=n;++i)
    {
    a[i][0]='X';
    a[i][m+1]='X';
    }
for (i=0;i<=m+1;++i)
    {
    a[0][i]='X';
    a[n+1][i]='X';
    }
sf=0;
inc=0;
cx[0]=xr;
cy[0]=yr;
r[xr][yr]=1;
while (inc<=sf)
      {
    //  for (i=inc;i<=sf;++i)

	  for (k=0;k<=7;++k)
	      {
	      if (a[cx[inc]+dx[k]][cy[inc]+dy[k]]!='X'&&r[cx[inc]+dx[k]][cy[inc]+dy[k]]==0)
		 {
		   cx[++sf]=cx[inc]+dx[k];
		   cy[sf]=cy[inc]+dy[k];
		   r[cx[sf]][cy[sf]]=r[cx[inc]][cy[inc]]+1;
  //		   printf("%d",r[cx[sf]][cy[sf]]);

		 }
	      }
	  inc++;
    }
sf=0;
inc=0;
cx[0]=xj;
cy[0]=yj;
j[xj][yj]=1;
while (inc<=sf)
      {
    //  for (i=inc;i<=sf;++i)

	  for (k=0;k<=7;++k)
	      {
	      if (a[cx[inc]+dx[k]][cy[inc]+dy[k]]!='X'&&j[cx[inc]+dx[k]][cy[inc]+dy[k]]==0)
		 {
		    cx[++sf]=cx[inc]+dx[k];
		    cy[sf]=cy[inc]+dy[k];
		    j[cx[sf]][cy[sf]]=j[cx[inc]][cy[inc]]+1;

		 }
	      }
	  inc++;
    }
for (i=1;i<=n;++i)
    for (k=1;k<=m;++k)
	if (r[i][k]==j[i][k]&&r[i][k]<min&&r[i][k]!=0)
	   {
	   min=r[i][k];
	   x=i;
	   y=k;
	   }
/*
for (i=1;i<=n;i++)
    {
    for (k=1;k<=m;k++)
	printf("%d",r[i][k]);
    printf("\n");
    }
printf("\n");
for (i=1;i<=n;i++)
    {
    for (k=1;k<=m;k++)
	printf("%d",r[i][k]);
    printf("\n");
    }
*/

f=fopen("rj.out","w");
fprintf(f,"%d %d %d",x,y,min);
fclose(f);
return 0;
}