Cod sursa(job #198312)

Utilizator alex23alexandru andronache alex23 Data 10 iulie 2008 11:13:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.96 kb
#include <stdio.h>


char c;
int a[105][105],b[105][105],i,j,n,m,rx,ry,jx,jy,min,xf,yf;


void functie1(int x,int y,int t)
  {
   if ((a[x-1][y-1]==0)||(a[x-1][y-1]>t))
                           {a[x-1][y-1]=t;
                            functie1(x-1,y-1,t+1);
                            }
   if ((a[x-1][y+1]==0)||(a[x-1][y+1]>t))
                           {a[x-1][y+1]=t;
                            functie1(x-1,y+1,t+1);
                            }
   if ((a[x+1][y-1]==0)||(a[x+1][y-1]>t))
                           {a[x+1][y-1]=t;
                            functie1(x+1,y-1,t+1);
                            }
   if ((a[x+1][y+1]==0)||(a[x+1][y+1]>t))
                           {a[x+1][y+1]=t;
                            functie1(x+1,y+1,t+1);
                            }
   if ((a[x+1][y]==0)||(a[x+1][y]>t))
                           {a[x+1][y]=t;
                            functie1(x+1,y,t+1);
                            }
   if ((a[x-1][y]==0)||(a[x-1][y]>t))
                           {a[x-1][y]=t;
                            functie1(x-1,y,t+1);
                            }
   if ((a[x][y+1]==0)||(a[x][y+1]>t))
                           {a[x][y+1]=t;
                            functie1(x,y+1,t+1);
                            }
   if ((a[x][y-1]==0)||(a[x][y-1]>t))
                           {a[x][y-1]=t;
                            functie1(x,y-1,t+1);
                            }
   }


void functie2(int x,int y,int t)
  {
   if ((b[x-1][y-1]==0)||(b[x-1][y-1]>t))
                           {b[x-1][y-1]=t;
                            functie2(x-1,y-1,t+1);
                            }
   if ((b[x-1][y+1]==0)||(b[x-1][y+1]>t))
                           {b[x-1][y+1]=t;
                            functie2(x-1,y+1,t+1);
                            }
   if ((b[x+1][y-1]==0)||(b[x+1][y-1]>t))
                           {b[x+1][y-1]=t;
                            functie2(x+1,y-1,t+1);
                            }
   if ((b[x+1][y+1]==0)||(b[x+1][y+1]>t))
                           {b[x+1][y+1]=t;
                            functie2(x+1,y+1,t+1);
                            }  
   if ((b[x+1][y]==0)||(b[x+1][y]>t))
                           {b[x+1][y]=t;
                            functie2(x+1,y,t+1);
                            }
   if ((b[x-1][y]==0)||(b[x-1][y]>t))
                           {b[x-1][y]=t;
                            functie2(x-1,y,t+1);
                            }
   if ((b[x][y+1]==0)||(b[x][y+1]>t))
                           {b[x][y+1]=t;
                            functie2(x,y+1,t+1);
                            }
   if ((b[x][y-1]==0)||(b[x][y-1]>t))
                           {b[x][y-1]=t;
                            functie2(x,y-1,t+1);
                            }
   }

int main()
 {FILE *f;
  f=fopen("rj.in","r");
  fscanf(f,"%d %d\n",&n,&m);
  for (i=1;i<=n;i++)
      {for (j=1;j<=m;j++)
         {fscanf(f,"%c",&c);
          if (c=='X') {a[i][j]=-1;b[i][j]=-1;}
          if (c=='R') {rx=i;ry=j;a[i][j]=-2;b[i][j]=0;}
          if (c=='J') {jx=i;jy=j;a[i][j]=0;b[i][j]=-3;}
          if (c==' ') {a[i][j]=0;b[i][j]=0;}
          }
       fscanf(f,"%c",&c);
       }
  fclose(f);

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


  for (i=0;i<=m+1;i++) b[0][i]=-1;
  for (i=1;i<=n+1;i++) b[i][m+1]=-1;
  for (i=0;i<=m;i++) b[n+1][i]=-1;
  for (i=1;i<=n;i++) b[i][0]=-1;

  functie1(rx,ry,1);
  functie2(jx,jy,1);

  min=0;
  for (i=1;i<=n;i++)
     for (j=1;j<=m;j++)
        if (min==0) {if ((a[i][j]==b[i][j])&&(a[i][j]>0))
                           {min=a[i][j];xf=i;yf=j;}
                     }
               else if ((min>a[i][j])&&(a[i][j]==b[i][j])&&(a[i][j]>0))
                               {min=a[i][j];xf=i;yf=j;}


  f=fopen("rj.out","w");
  fprintf(f,"%d %d %d",min+1,xf,yf);
  fclose(f);




  return 0;
  }