Pagini recente » Cod sursa (job #820990) | Cod sursa (job #2192575) | Cod sursa (job #1820865) | Cod sursa (job #908152) | Cod sursa (job #2701726)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int distr[105][105],distj[105][105];
int n,m;
queue <pair <int,int> > q;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
bool ok(int i, int j)
{
return (i>=1 && i<=n && j>=1 && j<=m);
}
void Lee(int i, int j, int dist[][105])
{
dist[i][j]=1;
q.push(make_pair(i,j));
while(!q.empty())
{
int x=q.front().first;
int y=q.front().second;
q.pop();
for(int dir=0;dir<8;dir++)
{
int inext=x+dx[dir];
int jnext=y+dy[dir];
if(ok(inext,jnext)==false || dist[inext][jnext]!=0)
{
continue;
}
dist[inext][jnext]=dist[x][y]+1;
q.push(make_pair(inext,jnext));
}
}
}
void afisare(int dist[][105])
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<dist[i][j]<<" ";
}
cout<<'\n';
}
///out<<'\n';
}
int main()
{
char s[105];
int minn=2000000000,pozi,pozj;
int ri,rj,ji,jj;
in>>n>>m;
in.get();
for(int i=1;i<=n;i++)
{
in.getline(s+1,101);
for(int j=1;j<=m;j++)
{
char c;
c=s[j];
if(c=='R')
{
ri=i;
rj=j;
}
if(c=='J')
{
ji=i;
jj=j;
}
if(c=='X')
{
distr[i][j]=-1;
distj[i][j]=-1;
}
}
}
Lee(ri,rj,distr);
Lee(ji,jj,distj);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(distj[i][j]==distr[i][j] && distj[i][j]>0)
{
if(distj[i][j]<minn)
{
minn=distj[i][j];
pozi=i;
pozj=j;
}
}
}
}
out<<minn<<" "<<pozi<<" "<<pozj;
return 0;
}