Pagini recente » Cod sursa (job #3358825) | Cod sursa (job #3358819) | Cod sursa (job #3358533) | Cod sursa (job #3358059) | Cod sursa (job #3360197)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
char a[101][101];
int r[101][101], j[101][101];
int i, l, n, m, x, y, t = 999999;
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { -1,0,1,-1,1,-1,0,1 };
struct Nod
{
int x, y, v;
};
queue<Nod> b;
queue<Nod> c;
int main()
{
cin >> n >> m;
for (i = 1; i <= n; i++)
for (l = 1; l <= m; l++)
r[i][l] = j[i][l] = -1;
cin.ignore();
for (i = 1; i <= n; i++)
{
cin.getline(a[i] + 1, 101);
for (l = 1; l <= m; l++)
{
if (a[i][l] == 'R')
{
b.push({ i, l, 0 });
r[i][l] = 0;
}
if (a[i][l] == 'J')
{
c.push({ i, l, 0 });
j[i][l] = 0;
}
}
}
while (!b.empty())
{
Nod p = b.front();
b.pop();
for (int d = 0; d < 8; d++)
{
int nx = p.x + dx[d];
int ny = p.y + dy[d];
if (nx >= 1 && nx <= n &&
ny >= 1 && ny <= m &&
a[nx][ny] != 'X' &&
r[nx][ny] == -1)
{
r[nx][ny] = p.v + 1;
b.push({ nx, ny, p.v + 1 });
}
}
}
while (!c.empty())
{
Nod p = c.front();
c.pop();
for (int d = 0; d < 8; d++)
{
int nx = p.x + dx[d];
int ny = p.y + dy[d];
if (nx >= 1 && nx <= n &&
ny >= 1 && ny <= m &&
a[nx][ny] != 'X' &&
j[nx][ny] == -1)
{
j[nx][ny] = p.v + 1;
c.push({ nx, ny, p.v + 1 });
}
}
}
for (i = 1; i <= n; i++)
{
for (l = 1; l <= m; l++)
{
if (r[i][l] == j[i][l] && r[i][l] != -1)
{
if (r[i][l] < t)
{
t = r[i][l];
x = i;
y = l;
}
}
}
}
cout << t+1 << ' ' << x << ' ' << y;
return 0;
}