Pagini recente » Cod sursa (job #2355924) | Cod sursa (job #3125639) | Cod sursa (job #981767) | Cod sursa (job #1864659) | Cod sursa (job #1644428)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int Nmax = 105;
int r[Nmax][Nmax], ju[Nmax][Nmax], n, m, rxi, ryi, jxi, jyi, Min = 10000, sx, sy, x[] = {-1,-1,-1,0,1,1,1,0};
int y[] = {-1,0,1,1,1,0,-1,-1};
queue <pair<int, int> > R,J;
void LEER()
{
int xc,yc,xv,yv;
R.push(make_pair(rxi,ryi));
r[rxi][ryi] = 1;
while(!R.empty())
{
xc = R.front().first;
yc = R.front().second;
R.pop();
for(int i = 0; i < 8; i++)
{
xv = xc + x[i];
yv = yc + y[i];
if(r[xv][yv] == 0)
{
r[xv][yv] = r[xc][yc] + 1;
R.push(make_pair(xv,yv));
}
}
}
}
void LEEJ()
{
int xc,yc,xv,yv;
J.push(make_pair(jxi,jyi));
ju[jxi][jyi] = 1;
while(!J.empty())
{
xc = J.front().first;
yc = J.front().second;
J.pop();
for(int i = 0; i < 8; i++)
{
xv = xc + x[i];
yv = yc + y[i];
if(ju[xv][yv] == 0)
{
ju[xv][yv] = ju[xc][yc] + 1;
J.push(make_pair(xv,yv));
}
}
}
}
int main()
{
f>>n>>m;
f.get();
for(int i = 0; i <= n+1; i++) r[i][0] = r[i][m+1] = ju[i][0] = ju[i][m+1] = -1;
for(int i = 0; i <= m+1; i++) r[0][i] = r[n+1][i] = ju[0][i] = ju[n+1][i] = -1;
for(int i = 1; i <= n; i++)
{
char x[Nmax];
f.getline(x,Nmax);
for(int j = 0; j < m; j++)
{
if(x[j] == 'X') r[i][j+1] = ju[i][j+1] = -1;
if(x[j] == 'R')
{
rxi = i;
ryi = j+1;
}
if(x[j] == 'J')
{
jxi = i;
jyi = j+1;
}
}
}
LEER();
LEEJ();
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(r[i][j] == ju[i][j] && r[i][j] > 0)
{
if(Min > r[i][j])
{
Min = r[i][j];
sx = i;
sy = j;
}
}
}
}
g<<Min<<' '<<sx<<' '<<sy<<'\n';
return 0;
}