Cod sursa(job #2287165)

Utilizator LorenaMariaHantig Lorena LorenaMaria Data 21 noiembrie 2018 17:03:18
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,a[2][101][101],r=10001,rx,ry,jx,jy;
char c;
int di[]={-1,-1,-1,0,0,1,1,1};
int dj[]={-1,0,1,-1,1,-1,0,1};
queue < pair < int,int > > q;
void lee(int x,int y,int p)
{ a[p][x][y]=1;
  q.push(make_pair(x,y));
  while(!q.empty())
  { x=q.front().first;
    y=q.front().second;
    q.pop();
    for(int d=0;d<8;d++)
    { if(!a[p][x+di[d]][y+dj[d]] && 0<x+di[d] && 0<y+dj[d] && x+di[d]<=n && y+dj[d]<=m)
         a[p][x+di[d]][y+dj[d]]=a[p][x][y]+1,q.push(make_pair(x+di[d],y+dj[d]));
    }
  }
}
int main()
{ in>>n>>m;
  for(int i=1;i<=n;i++)
  { in.get();
    for(int j=1;j<=m;j++)
    { in.get(c);
      if(c=='X')
         a[0][i][j]=-1,a[1][i][j]=-1;
      else if(c=='R')
         rx=i,ry=j;
      else if(c=='J')
         jx=i,jy=j;
    }
  }
  lee(rx,ry,0);
  lee(jx,jy,1);
  for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
      if(a[0][i][j]==a[1][i][j] && r>a[0][i][j] && a[0][i][j]>0)
         r=a[0][i][j],rx=i,ry=j;
  out<<r<<" "<<rx<<" "<<ry;
  in.close();
  out.close();
  return 0;
}