Cod sursa(job #324340)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 15 iunie 2009 19:55:52
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <stdio.h>   
#define DIM 72
  
int C[2][DIM*DIM],R[DIM][DIM],J[DIM][DIM],i,j,ic,jc,iv,jv,isol,jsol,iR,jR,iJ,jJ,p,u,k,n,m,min;   
int di[8]={0,0,1,-1,1,1,-1,-1};   
int dj[8]={1,-1,0,0,-1,1,-1,1};   
char w;   
  
int main() {   
       
  FILE *f = fopen("rj.in","r");   
  FILE *g = fopen("rj.out","w");   
  
  fscanf(f,"%d %d\n",&n,&m);   
     
  for (i=1; i<=n; i++) {   
    for (j=1; j<=m; j++) {   
      fscanf(f,"%c",&w);   
      if (w=='R') {   
        iR = i;   
        jR = j;   
      }   
      if (w=='J') {   
        iJ = i;   
        jJ = j;   
      }   
      if (w=='X')   
        R[i][j] = J[i][j] = -1;   
    }   
    fscanf(f,"%c",&w);   
  }   
       
  for (j=0; j<=m+1; j++)   
    R[0][j] = R[n+1][j] = J[0][j] = J[n+1][j] = -1;   
       
  for (i=0; i<=n+1; i++)   
    R[i][0] = R[i][m+1] = J[i][0] = J[i][m+1] = -1;   
       
  p = u = 1;   
  C[0][u] = iR;   
  C[1][u] = jR;   
  R[iR][jR] = 1;   
  
  while (p<=u) {   
    ic = C[0][p];   
    jc = C[1][p];   
    for (k=0; k<=7; k++) {   
      iv = ic + di[k];   
      jv = jc + dj[k];   
      if (R[iv][jv]==0) {   
        u++;   
        C[0][u] = iv;   
        C[1][u] = jv;   
        R[iv][jv] = R[ic][jc] + 1;   
      }   
    }   
    p++;   
  }      
     
  p = u = 1;   
  C[0][u] = iJ;   
  C[1][u] = jJ;   
  J[iJ][jJ] = 1;   
     
  while (p<=u) {   
    ic = C[0][p];   
    jc = C[1][p];   
    for (k=0; k<=7; k++) {   
      iv = ic + di[k];   
      jv = jc + dj[k];   
      if (J[iv][jv]==0) {   
        u++;   
        C[0][u] = iv;   
        C[1][u] = jv;   
        J[iv][jv] = J[ic][jc] + 1;   
      }   
    }   
    p++;   
  }   
     
  min = 902;
     
  for (i=1; i<=n; i++)   
    for (j=1; j<=m; j++)    
      if (R[i][j]==J[i][j] && R[i][j] < min && R[i][j] > 0) {   
        isol = i;   
        jsol = j;   
        min = R[i][j];   
      }   
       
  fprintf(g,"%d %d %d\n",min,isol,jsol);   
         
  fclose(f);   
  fclose(g);   
       
  return 0;   
}