Cod sursa(job #119584)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 2 ianuarie 2008 08:49:34
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.19 kb
#include<stdio.h>
long int m,n,i,k,xr,yr,xj,yj,xsol,ysol,r[110][110],j[110][110],prim,ultim,
cx[14000],cy[14000],cx1,cy1,tmin,ok,jj,tr,tj,a[110][110];
char *p,pp[110],caux;
int main()
{
    FILE *f,*g;f=fopen("rj.in","r");g=fopen("rj.out","w");
    fscanf(f,"%ld%ld",&n,&m);
    p=&pp[0];fgets(p,102,f);
    for(i=1;i<=n;i++)
    { fgets(p,102,f);
      for(k=1;k<=m;k++)
      { if(p[k-1]=='X')a[i][k]=1;
	if(p[k-1]=='R'){xr=i;yr=k;}
	if(p[k-1]=='J'){xj=i;yj=k;}
	r[i][k]=-1;j[i][k]=-1;
      }
    }
    for(i=0;i<=n+1;i++)
    { a[i][0]=1;a[i][m+1]=1;r[i][0]=-1;r[i][m+1]=-1;j[i][0]=-1;j[i][m+1]=-1;}
    for(k=0;k<=m+1;k++)
    { a[0][k]=1;a[n+1][k]=1;r[0][k]=-1;r[n+1][k]=-1;j[0][k]=-1;j[n+1][k]=-1;}
    r[xr][yr]=1;
    ultim=1;cx[1]=xr;cy[1]=yr;
    for(prim=1;prim<=ultim;prim++)
    {  cx1=cx[prim];cy1=cy[prim];
       if(!a[cx1+1][cy1+1])if(r[cx1+1][cy1+1]==-1){r[cx1+1][cy1+1]=r[cx1][cy1]+1;ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1+1;}
       if(!a[cx1+1][cy1-1])if(r[cx1+1][cy1-1]==-1){r[cx1+1][cy1-1]=r[cx1][cy1]+1;ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1-1;}
       if(!a[cx1-1][cy1+1])if(r[cx1-1][cy1+1]==-1){r[cx1-1][cy1+1]=r[cx1][cy1]+1;ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1+1;}
       if(!a[cx1-1][cy1-1])if(r[cx1-1][cy1-1]==-1){r[cx1-1][cy1-1]=r[cx1][cy1]+1;ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1-1;}
       if(!a[cx1+1][cy1])  if(r[cx1+1][cy1]==-1)  {r[cx1+1][cy1]=r[cx1][cy1]+1;  ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1;  }
       if(!a[cx1-1][cy1])  if(r[cx1-1][cy1]==-1)  {r[cx1-1][cy1]=r[cx1][cy1]+1;  ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1;  }
       if(!a[cx1][cy1+1])  if(r[cx1][cy1+1]==-1)  {r[cx1][cy1+1]=r[cx1][cy1]+1;  ultim++;cx[ultim]=cx1;  cy[ultim]=cy1+1;}
       if(!a[cx1][cy1-1])  if(r[cx1][cy1-1]==-1)  {r[cx1][cy1-1]=r[cx1][cy1]+1;  ultim++;cx[ultim]=cx1;  cy[ultim]=cy1-1;}
    }
    j[xj][yj]=1;
    ultim=1;cx[1]=xj;cy[1]=yj;
    for(prim=1;prim<=ultim;prim++)
    {  cx1=cx[prim];cy1=cy[prim];
       if(!a[cx1+1][cy1+1])if(j[cx1+1][cy1+1]==-1){j[cx1+1][cy1+1]=j[cx1][cy1]+1;ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1+1;}
       if(!a[cx1+1][cy1-1])if(j[cx1+1][cy1-1]==-1){j[cx1+1][cy1-1]=j[cx1][cy1]+1;ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1-1;}
       if(!a[cx1-1][cy1+1])if(j[cx1-1][cy1+1]==-1){j[cx1-1][cy1+1]=j[cx1][cy1]+1;ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1+1;}
       if(!a[cx1-1][cy1-1])if(j[cx1-1][cy1-1]==-1){j[cx1-1][cy1-1]=j[cx1][cy1]+1;ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1-1;}
       if(!a[cx1+1][cy1])  if(j[cx1+1][cy1]==-1)  {j[cx1+1][cy1]=j[cx1][cy1]+1;  ultim++;cx[ultim]=cx1+1;cy[ultim]=cy1;  }
       if(!a[cx1-1][cy1])  if(j[cx1-1][cy1]==-1)  {j[cx1-1][cy1]=j[cx1][cy1]+1;  ultim++;cx[ultim]=cx1-1;cy[ultim]=cy1;  }
       if(!a[cx1][cy1+1])  if(j[cx1][cy1+1]==-1)  {j[cx1][cy1+1]=j[cx1][cy1]+1;  ultim++;cx[ultim]=cx1;  cy[ultim]=cy1+1;}
       if(!a[cx1][cy1-1])  if(j[cx1][cy1-1]==-1)  {j[cx1][cy1-1]=j[cx1][cy1]+1;  ultim++;cx[ultim]=cx1;  cy[ultim]=cy1-1;}
    }
    tmin=m*n+5;
    for(i=1;i<=n;i++)
     { for(k=1;k<=m;k++)
	{ tr=r[i][k];
	  tj=j[i][k];
	  if(tr==tj)
	   if(tr!=-1)
	    if(tr<tmin)
	     {tmin=tr;
	      xsol=i;
	      ysol=k;
	     }
	}
     }
    fprintf(g,"%ld %ld %ld\n",tmin,xsol,ysol);
    fcloseall();
    return 0;
}