Pagini recente » Cod sursa (job #1497897) | Cod sursa (job #581772) | Cod sursa (job #2578293) | Cod sursa (job #144103) | Cod sursa (job #3324355)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX = 100;
struct pozitie
{
short x, y;
};
int N, M;
int Ro[DMAX + 2][DMAX + 2];
int Ju[DMAX + 2][DMAX + 2];
pozitie pRo, pJu;
int tMin = DMAX * DMAX + 1, xMin, yMin;
int d[8][2] = {{0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}};
void citire()
{
char c;
f >> N >> M;
for (int i = 1; i <= N; i++)
{
f.get();
for (int j = 1; j <= M; j++)
{
f.get(c);
switch(c)
{
case 'R':
pRo.x = i;
pRo.y = j;
Ro[i][j] = 1;
break;
case 'J':
pJu.x = i;
pJu.y = j;
Ju[i][j] = 1;
break;
case 'X':
Ro[i][j] = -1;
Ju[i][j] = -1;
}
}
}
}
void bordare()
{
for (int i = 0; i <= N + 1; i++)
Ro[i][0] = Ro[i][M + 1] = Ju[i][0] = Ju[i][M + 1] = -1;
for (int i = 1; i <= M; i++)
Ro[0][i] = Ro[N + 1][i] = Ju[0][i] = Ju[N + 1][i] = -1;
}
void Lee(pozitie pstart, int L[][DMAX + 2])
{
queue<pozitie> Q;
pozitie crt, vec;
Q.push(pstart);
while (!Q.empty())
{
crt = Q.front();
Q.pop();
for (int k = 0; k < 8; k++)
{
vec.x = crt.x + d[k][0];
vec.y = crt.y + d[k][1];
if (L[vec.x][vec.y] == 0)
{
L[vec.x][vec.y] = L[crt.x][crt.y] + 1;
Q.push(vec);
}
}
}
}
int main()
{
citire();
bordare();
Lee(pRo, Ro);
Lee(pJu, Ju);
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)
if (Ro[i][j] > 0 && Ro[i][j] == Ju[i][j] && Ro[i][j] < tMin)
{
tMin = Ro[i][j];
xMin = i;
yMin = j;
}
g << tMin << ' ' << xMin << ' ' << yMin;
f.close();
g.close();
return 0;
}