Cod sursa(job #288925)

Utilizator n3msizN3msiz n3msiz Data 26 martie 2009 11:12:51
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include<stdio.h>
#define DIM 102
int t,min,x,y,a[DIM][DIM],Ro[DIM][DIM],Ju[DIM][DIM],n,i,j,p,u,m,ic,jc,iv,jv,iR,jR,iJ,jJ,k;
int di[8]={-1,1,0,0,-1,1,-1,1};
int dj[8]={0,0,-1,1,-1,-1,1,1};
int C[2][DIM*DIM];
char s[DIM];

int main(){
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
min=10002;
fscanf(f,"%d%d\n",&n,&m);

for (i=1;i<=n;i++) {
  fgets(s,m+2,f);
  for (j=1;j<=m;j++) {
    a[i][j] = s[j-1];

      if(a[i][j]=='R'){
	iR=i;
	jR=j;
      }
      if(a[i][j]=='J'){
	iJ=i;
	jJ=j;
      }
      if(a[i][j]==' ')
	a[i][j]=0;
      if(a[i][j]=='X')
	a[i][j]=Ro[i][j]=Ju[i][j]=-1;


  }
}

/*
  for(i=1;i<=n;i++){
    int endline = 0;
    for(j=1;j<=m;j++){

      if (!endline) {
	fscanf(f,"%c",&a[i][j]);

      } else a[i][j] = '\n';

      if (a[i][j]=='\n') {
	endline = 1;
	a[i][j] = ' ';
      }
      if(a[i][j]=='R'){
	iR=i;
	jR=j;
      }
      if(a[i][j]=='J'){
	iJ=i;
	jJ=j;
      }
      if(a[i][j]==' ')
	a[i][j]=0;
      if(a[i][j]=='X')
	a[i][j]=Ro[i][j]=Ju[i][j]=-1;

    }
    if (!endline)
      fscanf(f,"\n");
  }
*/
for (i=0;i<=n+1;i++) {
   Ro[i][m+1]= Ro[i][0]=Ju[i][m+1]= Ju[i][0]=-1;
}
for(j=0;j<=m+1;j++)
   Ro[0][j]= Ro[n+1][j]=Ju[0][j]= Ju[n+1][j]=-1;


p=1;
u=1;
C[0][u]=iR;
C[1][u]=jR;
Ro[iR][jR]=1;

for(;p<=u;p++){
 ic = C[0][p];
 jc = C[1][p];
 for(k=0;k<=7;k++){
   iv=ic+di[k];
   jv=jc+dj[k];
   if(Ro[iv][jv]==0){
     u++;
     C[0][u]=iv;
     C[1][u]=jv;
     Ro[iv][jv]=Ro[ic][jc]+1;


   }
 }

}


p=1;
u=1;
C[0][u]=iJ;
C[1][u]=jJ;
Ju[iJ][jJ]=1;

for(;p<=u;p++){
 ic = C[0][p];
 jc = C[1][p];
 for(k=0;k<=7;k++){
   iv=ic+di[k];
   jv=jc+dj[k];
   if(Ju[iv][jv]==0){
     u++;
     C[0][u]=iv;
     C[1][u]=jv;
     Ju[iv][jv]=Ju[ic][jc]+1;


   }
 }

}

for (i=1;i<=n;i++)
  for(j=1;j<=m;j++)
    if(Ro[i][j]==Ju[i][j]&&Ro[i][j]!=-1&&Ro[i][j]!=0&&Ro[i][j]<min){
       x=i;
       y=j;
       min=Ro[i][j];

     }

  fprintf(g,"%d %d %d",min,x,y);
/* for(i=1;i<=n;i++){
   for(j=1;j<=m;j++)
    fprintf(g,"%d ",Ju[i][j]);
   fprintf(g,"\n");
 } */

fclose(f);
fclose(g);
return 0;
}