Cod sursa(job #198308)

Utilizator alex23alexandru andronache alex23 Data 10 iulie 2008 11:05:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.36 kb
#include <stdio.h>
//#include <conio.h>

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


void functie1(int x,int y,int t)
  {
   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);
                            }
   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);
                            }
   }


void functie2(int x,int y,int t)
  {
   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);
                            }
   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);
                            }
   }

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=1;i<=n;i++)
     {for (j=1;j<=m;j++)
        printf("%d ",a[i][j]);
      printf("\n");
      }
  printf("\n");  */

  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++)
        printf("%d ",a[i][j]);
      printf("\n");
      }
  printf("\n");
  for (i=1;i<=n;i++)
     {for (j=1;j<=m;j++)
        printf("%d ",b[i][j]);
      printf("\n");
      }
  getch();
  */
  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;
  }