Pagini recente » Cod sursa (job #664226) | Cod sursa (job #2648134) | Cod sursa (job #356677) | Cod sursa (job #2764887) | Cod sursa (job #1983331)
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
short int N, M, xr, yr, xj, yj, x, y, xprim, yprim, prim, ultim, rez, rezx, rezy;
short int vr[102][102];
short int vj[102][102];
short int coada[10000][2];
short int dirx[8] = {0, 0, 1, 1, 1, -1, -1, -1};
short int diry[8] = {1, -1, -1, 0, 1, -1, 0, 1};
int main(){
f >> N >> M;
f.get();
for (int i = 1; i <= N; i++){
char c[105];
f.getline(c, 105);
for (int j = 1; j <= M; j++){
if (c[j - 1] == 'X'){
vr[i][j] = -1;
vj[i][j] = -1;
}
else if (c[j - 1] == 'R'){
xr = i;
yr = j;
vr[xr][yr] = 1;
}
else if (c[j - 1] == 'J'){
xj = i;
yj = j;
vj[xj][yj] = 1;
}
}
}
for (int i = 0; i <= N + 1; i++){
vr[i][0] = -1;
vj[i][0] = -1;
vr[i][M + 1] = -1;
vj[i][M + 1] = -1;
}
for (int i = 0; i <= M + 1; i++){
vr[0][i] = -1;
vr[M + 1][i] = -1;
vj[0][i] = -1;
vj[M + 1][i] = -1;
}
coada[0][0] = xr;
coada[0][1] = yr;
ultim = 1;
while(prim < ultim){
x = coada[prim][0];
y = coada[prim++][1];
for (int i = 0; i < 8; i++){
xprim = x + dirx[i];
yprim = y + diry[i];
if (!vr[xprim][yprim]){
coada[ultim][0] = xprim;
coada[ultim++][1] = yprim;
vr[xprim][yprim] = vr[x][y] + 1;
}
}
}
prim = 0;
ultim = 1;
coada[0][0] = xj;
coada[0][1] = yj;
while (prim < ultim){
x = coada[prim][0];
y = coada[prim++][1];
for (int i = 0; i < 8; i++){
xprim = x + dirx[i];
yprim = y + diry[i];
if (!vj[xprim][yprim]){
coada[ultim][0] = xprim;
coada[ultim++][1] = yprim;
vj[xprim][yprim] = vj[x][y] + 1;
}
}
}
rez = 10000;
for (int i = 1; i <= N; i++){
for (int j = 1; j <= M; j++){
if (vr[i][j] == vj[i][j]){
if (vr[i][j] < rez && vr[i][j] > 0){
rez = vr[i][j];
rezx = i;
rezy = j;
}
else if (vr[i][j] == rez){
if (i < rezx){
rezx = i;
rezy = j;
}
else if (i == rezx){
if (j < rezy)
rezy = j;
}
}
}
}
}
g << rez << " " << rezx << " " << rezy;
return 0;
}