Cod sursa(job #1971996)

Utilizator stef2003Bud Stefan stef2003 Data 21 aprilie 2017 14:21:18
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <iostream>
#include <stdio.h>

using namespace std;

struct ura {
  int l, c;
};

int a[102][102], b[102][102];
int lin[8]={-1,-1,0,1,1,1,0,-1}, col[8]={0,1,1,1,0,-1,-1,-1};
ura v[10001];

int main() {
  FILE *fin, *fout;
  int n, m, i, j, ix, iy, fx, fy, in, sf, lc, cc;
  char ch;
  fin=fopen("rj.in","r");
  fout=fopen("rj.out","w");
  fscanf(fin, "%d%d",&n,&m);
  fscanf(fin, "%c",&ch);
  for(i=0;i<=n+1;i++)
    a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
  for(i=0;i<=m+1;i++)
    a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
  for(i=1;i<=n;i++) {
    for(j=1;j<=m;j++) {
      fscanf(fin, "%c",&ch);
      if(ch=='X')
        a[i][j]=b[i][j]=-1;
      if(ch=='R') {
        ix=i;
        iy=j;
      }
      if(ch=='J') {
        fx=i;
        fy=j;
      }
    }
    fscanf(fin, "%c",&ch);
  }
  v[1].l=ix;
  v[1].c=iy;
  in=sf=1;
  while(in<=sf) {
    for(i=0;i<8;i++) {
      lc=v[in].l+lin[i];
      cc=v[in].c+col[i];
      if(a[lc][cc]==0) {
        sf++;
        v[sf].l=lc;
        v[sf].c=cc;
        a[lc][cc]=a[v[in].l][v[in].c]+1;
      }
    }
    in++;
  }
  a[ix][iy]=0;
  for(i=0;i<=in;i++) {
    v[i].l=0;
    v[i].c=0;
  }
  v[1].l=fx;
  v[1].c=fy;
  in=sf=1;
  while(in<=sf) {
    for(i=0;i<8;i++) {
      lc=v[in].l+lin[i];
      cc=v[in].c+col[i];
      if(b[lc][cc]==0 && (lc!=fx || cc!=fy)) {
        sf++;
        v[sf].l=lc;
        v[sf].c=cc;
        b[lc][cc]=b[v[in].l][v[in].c]+1;
      }
    }
    in++;
  }
  b[fx][fy]=0;
  in=2000000000;
  lc=cc=0;
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
      if(a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0 && a[i][j]<in) {
        in=a[i][j];
        lc=i;
        cc=j;
      }
  fprintf(fout, "%d %d %d",in+1,lc,cc);
  fclose( fin );
  fclose( fout );
  return 0;
}