Cod sursa(job #198301)

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

char c;
int a[101][101],b[101][101],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]>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]>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]>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]>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]==0)||((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]>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]>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]>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]=-1;b[i][j]=-1;}
          if (c=='J') {jx=i;jy=j;a[i][j]=-1;b[i][j]=-1;}
          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,xf,yf);
  fclose(f);




  return 0;
  }