Pagini recente » Cod sursa (job #3125289) | Cod sursa (job #3206207) | Cod sursa (job #895283) | Cod sursa (job #70327) | Cod sursa (job #2926975)
#include <fstream>
#include <iostream>
#include <iomanip>
#define NMax 102
#define ND 8
using namespace std;
struct Punct {
int l, c;
} C[NMax*NMax], p;
int nl, nc, lr, cr, lj, cj;
int dl[ND] = {0, 1, 0, -1, -1, 1, -1, 1};
int dc[ND] = {1, 0, -1, 0, -1, 1, 1, -1};
char m[NMax][NMax];
int r[NMax][NMax], j[NMax][NMax];
ifstream fi("rj.in");
ofstream fo("rj.out");
void citeste() {
int l, c;
char car;
fi >> nl >> nc;
for (l = 0; l <= nl + 1; l++) // bordare
m[l][0] = m[l][nc+1] = 'X';
for (l = 0; l <= nc + 1; l++) // bordare
m[0][l] = m[nl+1][l] = 'X';
fi.get(car); // trecere la rand nou
for (l = 1; l <= nl; l++) {
for (c = 1; c <= nc; c++) {
fi.get(car); m[l][c] = car;
if (m[l][c] == 'R') {
lr = l; cr = c;
}
if (m[l][c] == 'J') {
lj = l; cj = c;
}
}
fi.get(car); // trecere la rand nou
}
fi.close();
}
void parcurge (int x0, int y0, int d[NMax][NMax]) {
int inc = 0, sf = 0, l, c, ln, cn, i;
for (l = 0; l <= nl + 1; l++)
for (c = 0; c <= nc + 1; c++)
d[l][c] = -1;
C[0].l = x0; C[0].c = y0; d[x0][y0] = 1;
while (inc <= sf) {
p = C[inc++];
for (i = 0; i < ND; i++) {
ln = p.l + dl[i]; cn = p.c + dc[i];
if (1 <= ln and ln <= nl and 1 <= cn and cn <= nc) // in oras
if (m[ln][cn] == ' ' and d[ln][cn] == -1) {
d[ln][cn] = 1 + d[p.l][p.c];
sf++; C[sf].l = ln; C[sf].c = cn;
}
}
}
}
void afiseaza() {
int tmin = NMax * NMax + 5, xmin, ymin, l, c;
for (l = 1; l <= nl; l++)
for (c = 1; c <= nc; c++)
if (r[l][c] == j[l][c])
if (r[l][c] < tmin && r[l][c] != -1) {
tmin = r[l][c]; xmin = l; ymin = c;
}
fo << tmin << ' ' << xmin << ' ' << ymin;
fo.close();
}
void d_mat (int m[NMax][NMax]) {
int l, c;
for (l = 1; l <= nl; l++) {
for (c = 1; c <= nc; c++)
cout << setw (2) << m[l][c] << ' ';
cout << '\n';
}
cout << '\n';
}
int main() {
citeste();
parcurge(lr, cr, r); d_mat(r);
parcurge(lj, cj, j); d_mat(j);
afiseaza();
return 0;
}