Cod sursa(job #119579)

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