Cod sursa(job #119554)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 1 ianuarie 2008 22:36:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.38 kb
#include<stdio.h>
long int m,n,i,j,xr,yr,xj,yj,xsol,ysol,R[102][102],J[102][102],prim,ultim,
cx[10405],cy[10405],cx1,cy1,tmin,ok,jj;
char a[102][102],caux;
int main()
{
    FILE *f,*g;f=fopen("rj.in","r");g=fopen("rj.out","w");
    fscanf(f,"%ld%ld",&n,&m);
    for(i=0;i<=n+1;i++)
    { a[i][0]='X';a[i][m+1]='X';}
    for(j=0;j<=m+1;j++)
    { a[0][j]='X';a[n+1][j]='X';}
    fscanf(f,"%c",&caux);
    for(i=1;i<=n;i++)
    { ok=1;
      for(j=1;j<=m;j++)
       { fscanf(f,"%c",&a[i][j]);
	 if(a[i][j]=='R'){xr=i;yr=j;a[i][j]=' ';}
	 if(a[i][j]=='J'){xj=i;yj=j;a[i][j]=' ';}
	 if(a[i][j]!=' '&&a[i][j]!='X'){ok=0;break;}
	 R[i][j]=10405;J[i][j]=10405;
       }
       if(!ok)for(jj=j;j<=m;j++){a[i][j]=' ';R[i][j]=10405;J[i][j]=10405;}
       else fscanf(f,"%c",&caux);
    }
    R[xr][yr]=1;
    prim=1;ultim=1;cx[1]=xr;cy[1]=yr;
    for(;prim<=ultim;prim++)
    {  cx1=cx[prim];cy1=cy[prim];
       if(a[cx1+1][cy1+1]==' ')if(R[cx1+1][cy1+1]>R[cx1][cy1]+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]>R[cx1][cy1]+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]>R[cx1][cy1]+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]>R[cx1][cy1]+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]>R[cx1][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]>R[cx1][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]>R[cx1][cy1]+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]>R[cx1][cy1]+1){R[cx1][cy1-1]=R[cx1][cy1]+1;ultim++;cx[ultim]=cx1;cy[ultim]=cy1-1;}
    }
    J[xj][yj]=1;
    prim=1;ultim=1;cx[1]=xj;cy[1]=yj;
    for(;prim<=ultim;prim++)
    {  cx1=cx[prim];cy1=cy[prim];
       if(a[cx1+1][cy1+1]==' ')if(J[cx1+1][cy1+1]>J[cx1][cy1]+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]>J[cx1][cy1]+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]>J[cx1][cy1]+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]>J[cx1][cy1]+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]>J[cx1][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]>J[cx1][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]>J[cx1][cy1]+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]>J[cx1][cy1]+1){J[cx1][cy1-1]=J[cx1][cy1]+1;ultim++;cx[ultim]=cx1;cy[ultim]=cy1-1;}
    }
    tmin=10405;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      if(R[i][j]==J[i][j])
       if(R[i][j]!=10405)
	if(R[i][j]<tmin)
	  {tmin=R[i][j];xsol=i;ysol=j;}

    fprintf(g,"%ld %ld %ld\n",tmin,xsol,ysol);
    fcloseall();
    return 0;
}