Pagini recente » Cod sursa (job #2728550) | Cod sursa (job #839609) | Cod sursa (job #1227046) | Cod sursa (job #637921) | Cod sursa (job #3139516)
#include <fstream>
#include <queue>
#include <climits>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
const int dx[]= {-1,-1,-1,0,1,1,1,0};
const int dy[]= {-1,0,1,1,1,0,-1,-1};
char c;
int a[102][102],b[102][102],n,m,mini,minx,miny;
queue<pair<int,int>>q;///pt romeo
queue<pair<int,int>>q1;///pt julieta
int main()
{
mini=INT_MAX;
cin>>n>>m;
cin.get(c);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin.get(c);
if(c=='X')
a[i][j]=b[i][j]=-1;
else if(c=='R')
a[i][j]=1,q.push(make_pair(i,j));
else if(c=='J')
b[i][j]=1,q1.push(make_pair(i,j));
}
cin.get(c);
}
///lee pt romeo
while(!q.empty())
{
int xs=q.front().first;
int ys=q.front().second;
for(int k=0; k<8; k++)
{
int x1=xs+dx[k];
int y1=ys+dy[k];
if(1<=x1 &&x1<=n &&1<=y1 &&y1<=m &&a[x1][y1]==0)
{
a[x1][y1]=a[xs][ys]+1;
q.push(make_pair(x1,y1));
}
}
q.pop();
}
///lee pt julieta
while(!q1.empty())
{
int xs=q1.front().first;
int ys=q1.front().second;
for(int k=0; k<8; k++)
{
int x1=xs+dx[k];
int y1=ys+dy[k];
if(1<=x1 &&x1<=n &&1<=y1 &&y1<=m &&b[x1][y1]==0)
{
b[x1][y1]=b[xs][ys]+1;
q1.push(make_pair(x1,y1));
}
}
q1.pop();
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==b[i][j] &&a[i][j]>0 && mini>a[i][j])
{
mini=a[i][j];
minx=i;
miny=j;
}
cout<<mini<<" "<<minx<<" "<<miny;
return 0;
}