Cod sursa(job #327042)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 26 iunie 2009 22:08:40
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <cstdio>
#define DIM 102
int dl[11] ={ -1, -1, -1, 0 ,0, 1, 1, 1};  
int dc[11] ={ -1, 0, 1, -1, 1, -1, 0, 1};
struct coada{ int l,c;} c[DIM*DIM],y,x;
int n,i,p,lmin,cmin,min,u,j,nn,rx,ry,jx,jy,mr[DIM][DIM],mj[DIM][DIM];
char m[DIM][DIM];    

using namespace std;

void read()
{
scanf("%d%d\n",&n,&nn);
for(i=1; i<=n; ++i)
   {
   fgets(m[i],DIM,stdin);
   for(j=0; j<nn; ++j) 
       if(m[i][j]=='R') { rx=i; ry=j+1;}
       else if(m[i][j]=='J') { jx=i; jy=j+1;}
       else if(m[i][j]=='X') mj[i][j+1]=mr[i][j+1]=-1;
   }
}
void delimitare()
{
   for(i=0; i<=n; ++i) { mj[i][nn+1]=mj[i][0]=mr[i][0]=mr[i][nn+1]=-1;}
   for(i=0; i<=nn; ++i) { mj[n+1][i]=mj[0][i]=mr[n+1][i]=mr[0][i]=-1;}
}
void bfr()
{
//Vino Julieta mea!:)
   mr[rx][ry]=1;
   p=u=0;
   x.l=rx;x.c=ry;
   c[p]=x;
   while( p<=u )
        {
        x=c[p++];
        for(i=0; i<8; ++i)
            {
              y.l=x.l+dl[i];
              y.c=x.c+dc[i];
              if(mr[y.l][y.c]==0)
              {
              mr[y.l][y.c]=mr[x.l][x.c]+1;
              c[++u]=y;
              }
            }
       }
}              
void bfj()
{
//Vin Romica ! :)
   mj[jx][jy]=1;
   p=u=0;
   x.l=jx;x.c=jy;
   c[p]=x;
   while( p<=u )
        {
        x=c[p++];
        for(i=0; i<8; ++i)
           {
           y.l=x.l+dl[i];
           y.c=x.c+dc[i];
           if(mj[y.l][y.c]==0)
             {
              mj[y.l][y.c]=mj[x.l][x.c]+1;
              c[++u]=y;
             }
           }
        }
}             
void amorezi()
{
   //scena aceasta ar trebui cenzurata :)
   lmin=cmin=min=100000;
   for(i=1; i<=n; ++i)
     for(j=1;j<=nn; ++j)
        if( (mr[i][j]!=0 && mr[i][j]!=-1) && mr[i][j]==mj[i][j])
           if(mr[i][j]<min)
              {
              min=mr[i][j];
              lmin=i;
              cmin=j; 
              }             
printf("%d %d %d\n",min,lmin,cmin);
}                        
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
read();
delimitare();
bfr();
bfj();
amorezi();//Intalnirea dintre cei 2 :>:)
return 0;//Si am incalecat pe o sa si v-am spus povestea asa.
}