Pagini recente » Cod sursa (job #3141919) | Cod sursa (job #2387234) | Cod sursa (job #2387240) | Cod sursa (job #3250657) | Cod sursa (job #2453077)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("br.in");
ofstream fout("br.out");
#define MAXNM 105
const short dx[] = {-1,-1,0,1,1,1,0,-1};
const short dy[] = {0,1,1,1,0,-1,-1,-1};
const short dirN = 8;
int n, m, dis[MAXNM][MAXNM], dis2[MAXNM][MAXNM], board[MAXNM][MAXNM];
queue < pair <int, int> > tail;
pair <int, int> res(INT_MAX, INT_MAX);
int disrj, disp, xj, yj;
void Read()
{
char c[MAXNM];
fin >> n >> m;
fin.getline(c, MAXNM);
for (int i = 1; i <= n; i++)
{
fin.getline(c, MAXNM);
for (int j = 0; c[j]; j++)
{
switch (c[j])
{
case 'X':
board[i][j + 1] = 1;
break;
case 'R':
board[i][j + 1] = 2;
tail.push(make_pair(i, j + 1));
dis[i][j + 1] = 1;
break;
case 'J':
board[i][j + 1] = 3;
dis[i][j + 1] = INT_MAX;
dis2[i][j + 1] = 1;
xj = i;
yj = j + 1;
break;
}
}
}
return;
}
inline bool isOk(int x, int y)
{
if (x < 1 || y < 1 || x > n || y > m || board[x][y] == 1)
return false;
return true;
}
void Lee()
{
int x, y, xNext, yNext;
bool ok = true;
while (!tail.empty() && ok)
{
x = tail.front().first;
y = tail.front().second;
tail.pop();
for (int dir = 0; dir < dirN && ok; dir++)
{
xNext = x + dx[dir];
yNext = y + dy[dir];
if (isOk(xNext, yNext) && !dis[xNext][yNext])
{
dis[xNext][yNext] = dis[x][y] + 1;
tail.push(make_pair(xNext, yNext));
}
else if (dis[xNext][yNext] == INT_MAX)
{
disrj = dis[x][y] + 1;
ok = false;
}
}
}
return;
}
void Lee2()
{
int x, y, xNext, yNext;
bool ok =true;
while (!tail.empty() && ok)
{
x = tail.front().first;
y = tail.front().second;
tail.pop();
for (int dir = 0; dir < dirN && ok; dir++)
{
xNext = x + dx[dir];
yNext = y + dy[dir];
if (isOk(xNext, yNext) && !dis2[xNext][yNext])
{
dis2[xNext][yNext] = dis2[x][y] + 1;
tail.push(make_pair(xNext, yNext));
if (dis[xNext][yNext] == disp && (xNext < res.first || yNext < res.second))
{
res.first = xNext;
res.second = yNext;
}
}
}
}
}
int main()
{
Read();
Lee();
disp = (disrj / 2) + 1;
fout << disp << ' ';
while (!tail.empty())
tail.pop();
tail.push(make_pair(xj, yj));
Lee2();
fout<< res.first << ' ' << res.second;
//*/
return 0;
}