Cod sursa(job #366307)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 21 noiembrie 2009 15:06:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
# include <stdio.h>
int a[105][105],i,j,n,m,x[10005],y[10005],xf,yf,k,p,u,tmin,ok;
char ch,sir[100];
  int q[10]={0,1,-1,0,0,-1,-1,1,1};
  int w[10]={0,0,0,-1,1,-1,1,-1,1};

void verif (int i,int j)
{ int k;
if (i==xf && j==yf)
ok=1;


for (k=1;k<=8;k++)
if (a[i+q[k]][j+w[k]]==a[i][j]+1)
verif(i+q[k],j+w[k]);





}


int main ()
{
freopen ("rj.in","r",stdin);
freopen ("rj.out","w",stdout);
scanf ("%i%i",&n,&m);
scanf ("%c",&ch);
for (i=1;i<=n;i++)
{
fgets (sir,115,stdin);
 for (j=0;j<m;j++)
{
 ch=sir[j];


   if (ch=='R')
 {
 x[1]=i;
 y[1]=j+1;
 a[i][j+1]=1;
 }

 if (ch=='J')
 a[i][j+1]=-2;

 if (ch=='X')
 a[i][j+1]=-1;
 if (ch==' ')
 a[i][j+1]=0;

 }

 }
 for (i=0;i<=m+1;i++)
 {
 a[0][i]=-1;
 a[n+1][i]=-1;
 }
 for (i=0;i<=n+1;i++)
 {
 a[i][0]=-1;
 a[i][m+1]=-1;
 }




    p=1;
    u=1;
	    ok=0;
 while (p<=u && ok==0)
 {


   for (k=1;k<=8;k++)
   {

     i=x[p];
     j=y[p];

     i=i+q[k];
     j=j+w[k];
    if (a[i][j]==0)
    {
     u++;
     a[i][j]=1+a[x[p]][y[p]];
     x[u]=i;
     y[u]=j;
    }

     if (a[i][j]==-2 && a[x[p]][y[p]]%2==0)
     {
      ok=1;
      xf=i;
      yf=j;
      a[i][j]=1+a[x[p]][y[p]];
      tmin=(a[x[p]][y[p]]+2)/2;
      printf ("%i ",tmin);

     }

   }

   p++;

 }



 for (i=1;i<=n;i++)
 for (j=1;j<=m;j++)
 if (a[i][j]==tmin)
 {ok=0;
 verif (i,j);


   if (ok==1)
   {
    printf ("%i %i",i,j);
    break;
   }
 }




 return 0;
}