Pagini recente » Cod sursa (job #1401388) | Cod sursa (job #1794470) | Cod sursa (job #650263) | Cod sursa (job #1092452) | Cod sursa (job #1785563)
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
char c;
int dx[]={1, 1, 1, 0, 0, -1, -1, -1};
int dy[]={-1, 0, 1, 1, -1, -1, 0, 1};
queue < pair <int, int> > cd;
pair <int, int> aux, aux1;
int n, m, i, j, mi=100000,ju[104][104], r[104][104], xr, yr, xj, yj, ln, col, ln1, col1;
char s[200];
int main ()
{
f>>n>>m;
for (i=1; i<=n; i++)
{
f.get();
f.get(s , 200 );
for (j=0; j<m; j++)
{
c=s[j];
if (c=='X')
{
r[i][j+1]=ju[i][j+1]=-1;
}
else if (c=='R')
{
r[i][j+1]=1;
xr=i;
yr=j+1;
}
else if (c=='J')
{
xj=i;
yj=j+1;
ju[i][j+1]=1;
}
}
}
for (i=0; i<=m+1; i++)
{
r[0][i]=ju[0][i]=r[n+1][i]=ju[n+1][i]=-1;
}
for (i=0; i<=n+1; i++)
{
r[i][0]=ju[i][0]=r[i][m+1]=ju[i][m+1]=-1;
}
aux=make_pair(xr, yr);
cd.push(aux);
while (!cd.empty())
{
aux=cd.front();
// cout<<1;
for (i=0; i<8; i++)
{
ln=aux.first;
col=aux.second;
ln+=dx[i];
col+=dy[i];
if (r[ln][col]==0)
{
r[ln][col]=r[aux.first][aux.second]+1;
cd.push( make_pair(ln, col) );
}
}
cd.pop();
}
aux=make_pair(xj, yj);
cd.push(aux);
while (!cd.empty())
{
aux=cd.front();
for (i=0; i<8; i++)
{
ln=aux.first;
col=aux.second;
ln+=dx[i];
col+=dy[i];
if (ju[ln][col]==0)
{
ju[ln][col]=ju[aux.first][aux.second]+1;
cd.push( make_pair(ln, col) );
}
}
cd.pop();
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (r[i][j]==ju[i][j] && r[i][j]>=1)
{
if (r[i][j]<mi)
{
xr=i;
yr=j;
mi=r[i][j];
}
}
}
}
g<<mi<<" "<<xr<<" "<<yr;
return 0;
}