Cod sursa(job #2324642)

Utilizator tgm000Tudor Mocioi tgm000 Data 21 ianuarie 2019 11:05:30
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<cstdio>
struct celula{int linie,coloana;};
int romeo[101][101],julieta[101][101];
celula coada[10001];
int vlin[8]={-1,-1,0,1,1,1,0,-1};
int vcol[8]={0,1,1,1,0,-1,-1,-1};
int main(){
  int inc,sf,rl,rc,jl,jc,n,m,x,y,min,i,j,l,col;
  char c;
  freopen("rj.in","r",stdin);
  freopen("rj.out","w",stdout);
  scanf("%d%d\n",&n,&m);
  for(i=1;i<=n;i++){
    for(j=1;j<=m;j++){
      scanf("%c",&c);
      if(c=='X')
        romeo[i][j]=julieta[i][j]=-1;
      else if(c=='R'){
        rl=i;
        rc=j;
      }
      else if(c=='J'){
        jl=i;
        jc=j;
      }
    }
    scanf("%c",&c);
  }
  //bordarea
  for(i=0;i<=n+1;i++)
    romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=-1;
  for(j=0;j<=m+1;j++)
    romeo[0][j]=romeo[n+1][j]=julieta[0][j]=julieta[n+1][j]=-1;
  //romeo
  inc=sf=1;
  coada[1].linie=rl;
  coada[1].coloana=rc;
  romeo[rl][rc]=1;
  while(inc<=sf){
    for(i=0;i<=7;i++){
      l=coada[inc].linie+vlin[i];
      col=coada[inc].coloana+vcol[i];
      if(romeo[l][col]==0){
        sf++;
        coada[sf].linie=l;
        coada[sf].coloana=col;
        romeo[l][col]=romeo[coada[inc].linie][coada[inc].coloana]+1;
      }
    }
    inc++;
  }
  //julieta
  inc=sf=1;
  coada[1].linie=jl;
  coada[1].coloana=jc;
  julieta[jl][jc]=1;
  while(inc<=sf){
    for(i=0;i<=7;i++){
      l=coada[inc].linie+vlin[i];
      col=coada[inc].coloana+vcol[i];
      if(julieta[l][col]==0){
        sf++;
        coada[sf].linie=l;
        coada[sf].coloana=col;
        julieta[l][col]=julieta[coada[inc].linie][coada[inc].coloana]+1;
      }
    }
    inc++;
  }
  //locul de intalnire
  min=10001;
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
      if(romeo[i][j]==julieta[i][j]&&romeo[i][j]<min&&romeo[i][j]>0){
        min=romeo[i][j];
        x=i;
        y=j;
      }
  printf("%d %d %d",min,x,y);
  return 0;
}