Cod sursa(job #2537320)

Utilizator anabatAna Batrineanu anabat Data 3 februarie 2020 16:04:30
Problema Rj Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 100

char mat[NMAX+1][NMAX+1];
int queuex[NMAX*NMAX], queuey[NMAX*NMAX], dist1[NMAX][NMAX],dist2[NMAX][NMAX];
int inceputx,inceputy,sfarsitx,sfarsity;
int dlin[8]={-1,-1,0,1,1,1,0,-1};
int dcol[8]={0,1,1,1,0,-1,-1,-1};

void pop(){
  inceputx++;
  inceputy++;
}
void push(int x,int y){
  queuex[sfarsitx]=x;
  queuey[sfarsity]=y;
  sfarsitx++;
  sfarsity++;
}
char empty(){
  return(inceputx==sfarsitx);
}
void bordare (int n,int m){
  int i,j;
  for(j=0;j<=m+1;j++){
    mat[0][j]=mat[n+1][j]='X';
  }
  for(i=0;i<=n+1;i++){
    mat[i][0]=mat[i][m+1]='X';
  }
}

void lee (int startx, int starty,int dist[NMAX][NMAX]){
  push(startx,starty);
  mat[startx][starty]=1; ///marcam
  int a,b,dir;
  while(!empty()){
    a=queuex[inceputx];
    b=queuey[inceputy];
    pop();
    for(dir=0;dir<4;dir++){
      if(mat[a+dlin[dir]][b+dcol[dir]]!=1&&mat[a+dlin[dir]][b+dcol[dir]]!='X'){
        mat[a+dlin[dir]][b+dcol[dir]]=1;
        push(a+dlin[dir],b+dcol[dir]);
        dist[a+dlin[dir]][b+dcol[dir]]=dist[a][b]+1;
      }
    }
  }
}
int main()
{
  FILE *fin,*fout;
  fin=fopen("rj.in","r");
  fout=fopen("rj.out","w");

  int n,m,i,j,roml=0,romc=0,jull=0,julc=0,minl=0,minc=0,min;
  fscanf(fin,"%d%d\n",&n,&m);
  for(i=1;i<=n;i++){
    for(j=1;j<=m;j++){
      mat[i][j]=fgetc(fin);
      if(mat[i][j]=='R'){
        roml=i;
        romc=j;
      }
      else if(mat[i][j]=='J'){
        jull=i;
        julc=j;
      }
    }
    fgetc(fin);
  }
  bordare(n,m);
  lee(roml,romc,dist1);
  lee(jull,julc,dist2);
  min=105;
  for(i=1;i<=n;i++){
    for(j=1;j<=m;j++){
      if(dist1[i][j]==dist2[i][j]){
        if(dist1[i][j]<min){
          min=dist1[i][j];
          minl=i;
          minc=j;
        }
      }
    }
  }
  fprintf(fout,"%d %d %d",min,minl,minc);

  fclose(fin);
  fclose(fout);
  return 0;
}