Pagini recente » Cod sursa (job #335836) | Cod sursa (job #1489414) | Cod sursa (job #2911940) | Cod sursa (job #2814919) | Cod sursa (job #2573054)
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int di[]={1, 1, 1, 0, 0, -1, -1, -1};
int dj[]={1, 0, -1, 1, -1, 1, 0, -1};
queue < pair <int, int> > coada;
int ij,jj,jr,ir;
int J[101][101], R[101][101], mt[101][101], linii, coloane;
int rez, lr, cr;
char sir[102];
void Lee1() {
coada.push(make_pair(ir, jr));
R[ir][jr] = 1;
while (!coada.empty()) {
int i = coada.front().first;
int j = coada.front().second;
coada.pop();
for (int k = 0; k < 8; k++) {
int i_urmator = i + di[k];
int j_urmator = j + dj[k];
if (i_urmator >= 1 && i_urmator <= linii && j_urmator >= 1 && j_urmator <= coloane && mt[i_urmator][j_urmator] == 0 && R[i_urmator][j_urmator] == 0) {
coada.push(make_pair(i_urmator, j_urmator));
R[i_urmator][j_urmator] = R[i][j] + 1;
}
}
}
}
void Lee2() {
coada.push(make_pair(ij, jj));
J[ij][jj] = 1;
while (!coada.empty()) {
int i = coada.front().first;
int j = coada.front().second;
coada.pop();
for (int k = 0; k < 8; k++) {
int i_urmator = i + di[k];
int j_urmator = j + dj[k];
if (i_urmator >= 1 && i_urmator <= linii && j_urmator >= 1 && j_urmator <= coloane && mt[i_urmator][j_urmator] == 0 && J[i_urmator][j_urmator] == 0) {
coada.push(make_pair(i_urmator, j_urmator));
J[i_urmator][j_urmator] = J[i][j] + 1;
}
}
}
}
int main() {
fin >> linii >> coloane;
fin.get();
for (int i = 1; i <= linii; i++) {
fin.getline(sir,102);
for (int j = 0; j < coloane; j++) {
if (sir[j] == 'X')
mt[i][j + 1] = -1;
else if (sir[j] == 'R') {
ir = i;
jr = j + 1;
}
else if (sir[j] == 'J') {
ij = i;
jj = j + 1;
}
}
}
Lee1();
Lee2();
rez = 2000000000;
for (int i = 1; i <= linii; i++) {
for (int j = 1; j <= coloane; j++) {
if (R[i][j] > 0 && R[i][j] == J[i][j]) {
if (R[i][j] < rez || (R[i][j] == rez && i < lr) || (R[i][j] == rez && i == lr && j < cr)) {
rez = R[i][j];
lr = i;
cr = j;
}
}
}
}
fout << rez << ' ' << lr << ' ' << cr;
return 0;
}