Pagini recente » Cod sursa (job #287984) | Cod sursa (job #3201314) | ordonare-prea-usor | Cod sursa (job #289069) | Cod sursa (job #2453089)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.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, disr[MAXNM][MAXNM], disj[MAXNM][MAXNM], board[MAXNM][MAXNM];
queue < pair <int, int> > tail;
int disp, xj, yj, xr, yr;
void diplayarr(int mat[MAXNM][MAXNM])
{
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
cout<<mat[i][j];
cout<<endl;
}
}
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;
xr = i;
yr = j + 1;
disr[i][j + 1] = 1;
break;
case 'J':
board[i][j + 1] = 3;
disj[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 i, int j, int mat[MAXNM][MAXNM])
{
tail.push(make_pair(i, j));
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) && !mat[xNext][yNext])
{
mat[xNext][yNext] = mat[x][y] + 1;
tail.push(make_pair(xNext, yNext));
}
}
}
return;
}
int main()
{
int resx, resy, tmin = INT_MAX;
Read();
Lee(xr, yr, disr);
Lee(xj, yj, disj);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (disr[i][j] == disj[i][j] && disr[i][j] && disr[i][j] < tmin)
{
tmin = disr[i][j];
resx = i;
resy = j;
}
fout <<tmin << ' ' << resx << ' ' << resy;
//*/
return 0;
}