Cod sursa(job #198318)

Utilizator alex23alexandru andronache alex23 Data 10 iulie 2008 13:17:03
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.66 kb
#include <stdio.h>
#include <string.h>
#define NMAX 105

struct punct{
 int _x,_y;
 };

punct modif[10000];

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


void functie1(int x,int y)
  {int li,lf;
   li=1;lf=1;
   modif[1]._x=x;
   modif[1]._y=y;
   for (i=li;i<=lf;i++)
       {x=modif[i]._x;
        y=modif[i]._y;
        if ((a[x-1][y-1]==0)||(a[x-1][y-1]>i))
                           {a[x-1][y-1]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y-1;
                            }
        if ((a[x-1][y+1]==0)||(a[x-1][y+1]>i))
                           {a[x-1][y+1]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y+1;
                            }
        if ((a[x+1][y-1]==0)||(a[x+1][y-1]>i))
                           {a[x+1][y-1]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y-1;
                            }
        if ((a[x+1][y+1]==0)||(a[x+1][y+1]>i))
                           {a[x+1][y+1]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y+1;
                            }
  		  if ((a[x+1][y]==0)||(a[x+1][y]>i))
                           {a[x+1][y]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y;
                            }
   	  if ((a[x-1][y]==0)||(a[x-1][y]>i))
                           {a[x-1][y]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y;
                            }
   	  if ((a[x][y+1]==0)||(a[x][y+1]>i))
                           {a[x][y+1]=i;
                            lf++;
                            modif[lf]._x=x;
                            modif[lf]._y=y+1;
                            }
        if ((a[x][y-1]==0)||(a[x][y-1]>i))
                           {a[x][y-1]=i;
                            lf++;
                            modif[lf]._x=x;
                            modif[lf]._y=y-1;
                            }
        }
   }


void functie2(int x,int y)
  {int li,lf;
   li=1;lf=1;
   modif[1]._x=x;
   modif[1]._y=y;
   for (i=li;i<=lf;i++)
       {x=modif[i]._x;
        y=modif[i]._y;
        if ((b[x-1][y-1]==0)||(b[x-1][y-1]>i))
                           {b[x-1][y-1]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y-1;
                            }
        if ((b[x-1][y+1]==0)||(b[x-1][y+1]>i))
                           {b[x-1][y+1]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y+1;
                            }
        if ((b[x+1][y-1]==0)||(b[x+1][y-1]>i))
                           {b[x+1][y-1]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y-1;
                            }
        if ((b[x+1][y+1]==0)||(b[x+1][y+1]>i))
                           {b[x+1][y+1]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y+1;
                            }
  		  if ((b[x+1][y]==0)||(b[x+1][y]>i))
                           {b[x+1][y]=i;
                            lf++;
                            modif[lf]._x=x+1;
                            modif[lf]._y=y;
                            }
   	  if ((b[x-1][y]==0)||(b[x-1][y]>i))
                           {b[x-1][y]=i;
                            lf++;
                            modif[lf]._x=x-1;
                            modif[lf]._y=y;
                            }
   	  if ((b[x][y+1]==0)||(b[x][y+1]>i))
                           {b[x][y+1]=i;
                            lf++;
                            modif[lf]._x=x;
                            modif[lf]._y=y+1;
                            }
        if ((b[x][y-1]==0)||(b[x][y-1]>i))
                           {b[x][y-1]=i;
                            lf++;
                            modif[lf]._x=x;
                            modif[lf]._y=y-1;
                            }
        }
   }


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

  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;
  }