Pagini recente » Cod sursa (job #2899584) | Cod sursa (job #2299268) | Cod sursa (job #620854) | Cod sursa (job #1687246) | Cod sursa (job #2431888)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, dp[101][101][2], rx, ry, jx, jy, minim = 999999999, xf, yf;
char s[105];
int dx[] = {1, -1, 0, 0, 1, 1, -1, -1};
int dy[] = {0, 0, 1, -1, 1, -1, 1, -1};
void Lee(int x, int y, int p)
{
queue <pair <int, int> > coada;
coada.push({x, y});
dp[x][y][p] = 1;
while (!coada.empty())
{
int i = coada.front().first;
int j = coada.front().second;
coada.pop();
for (int k = 0; k < 8; ++k)
{
int ii = i + dx[k];
int jj = j + dy[k];
if (ii >= 1 && ii <= n && jj >= 1 && jj <= m && dp[ii][jj][p] == 0)
{
dp[ii][jj][p] = dp[i][j][p] + 1;
coada.push({ii, jj});
}
}
}
}
int main()
{
fin >> n >> m;
fin.get();
for (int i = 1; i <= n; ++i)
{
fin.get(s, 101);
for (int j = 1; j <= m; ++j)
{
if (s[j - 1] == 'R')
{
rx = i;
ry = j;
}
if (s[j - 1] == 'J')
{
jx = i;
jy = j;
}
if (s[j - 1] == 'X')
{
dp[i][j][0] = dp[i][j][1] = -1;
}
}
fin.get();
}
Lee(rx, ry, 0);
Lee(jx, jy, 1);
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
if (dp[i][j][0] <= 0 || dp[i][j][1] <= 0)
{
continue;
}
if (dp[i][j][0] == dp[i][j][1] && dp[i][j][0] < minim)
{
minim = dp[i][j][0];
xf = i;
yf = j;
}
}
}
fout << minim << " " << xf << " " << yf;
fin.close();
fout.close();
}