Pagini recente » Cod sursa (job #36277) | Cod sursa (job #1601927) | Cod sursa (job #2909861) | Cod sursa (job #2738092) | Cod sursa (job #2893639)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("RJ.in");
ofstream fout("RJ.out");
queue < pair <int, int> > coada;
int dx[] = { 0, 1, 0, -1, -1, 1, 1, -1 };
int dy[] = { 1, 0, -1, 0, 1, 1, -1, -1 };
int a[110][110];
int n, m;
int x, y;
int iR, jR, iJ, jJ;
char c[110][110];
int tmin = 300;
int pozi, pozj;
bool border(int a, int b)
{
return a >= 1 && a <= n && b >= 1 && b <= m;
}
void Lee()
{
while (!coada.empty())
{
x = coada.front().first;
y = coada.front().second;
coada.pop();
for (int i = 0; i <= 7; i++)
{
int inou = x + dx[i];
int jnou = y + dy[i];
if (border(inou, jnou) && a[inou][jnou] == 0)
{
a[inou][jnou] = a[x][y] + 1;
coada.push(make_pair(inou, jnou));
}
else if (a[inou][jnou] == a[x][y] + 1)
{
if (a[inou][jnou] < tmin)
{
tmin = a[inou][jnou];
pozi = inou;
pozj = jnou;
}
}
}
}
}
int main()
{
fin >> n >> m;
for (int i = 0; i <= n; i++)
fin.getline(c[i], 101);
for(int i = 1; i <= n; i++)
for (int j = 0; j < m; j++)
{
if (c[i][j] == 'X')
a[i][j + 1] = -1;
else if (c[i][j] == 'R')
{
iR = i;
jR = j + 1;
a[i][j + 1] = 1;
}
else if (c[i][j] == 'J')
{
iJ = i;
jJ = j + 1;
a[i][j + 1] = 1;
}
}
coada.push(make_pair(iR, jR));
coada.push(make_pair(iJ, jJ));
Lee();
fout << tmin << " " << pozi << " " << pozj;
}