Pagini recente » Cod sursa (job #1548309) | Cod sursa (job #280598) | Cod sursa (job #2512873) | Cod sursa (job #445509) | Cod sursa (job #139398)
Cod sursa(job #139398)
#include <fstream>
#define MAX 102
#define INFINIT 1000
using namespace std;
char a[MAX][MAX];
int R[MAX][MAX];
int J[MAX][MAX];
int c[MAX*MAX][2];
int n, m;
int si[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int sj[] = {-1, 0, 1, -1, 1, -1, 0, 1};
int ir, jr, ij, jj;
void Read();
void Lee(int, int, int[MAX][MAX]);
int Ok(int, int);
void Verifica();
int main()
{
Read();
Lee(ir, jr, R);
Lee(ij, jj, J);
Verifica();
return 0;
}
void Read()
{
ifstream fin("rj.in");
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin.get();
for (int j = 1; j <= m; j++)
{
a[i][j] = fin.get();
R[i][j] = J[i][j] = INFINIT;
if (a[i][j] == 'R')
{
ir = i;
jr = j;
R[i][j] = 1;
}
if (a[i][j] == 'J')
{
ij = i;
jj = j;
J[i][j] = 1;
}
}
}
fin.close();
}
void Lee(int is, int js, int b[MAX][MAX])
{
// p = u = 0;
int in, jn;
int i, j, p, u;
for ( c[p = u = 0][0] = is, c[p][1] = js; p <= u; p++ )
{
i = c[p][0];
j = c[p][1];
for (int d = 0; d < 8; d++)
{
in = i + si[d];
jn = j + sj[d];
if ( Ok(in, jn) && b[in][jn] > b[i][j] + 1)
{
u++;
b[in][jn] = b[i][j] + 1;
c[u][0] = in;
c[u][1] = jn;
}
}
}
}
int Ok(int x, int y)
{
if (a[x][y] == 'X') return 0;
if (x < 1 || x > n || y < 1 || y > m)
return 0;
return 1;
}
void Verifica()
{
ofstream fout("rj.out");
int min = INFINIT;
int mi, mj;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
if (R[i][j] == J[i][j] && min > R[i][j])
{
min = R[i][j];
mi = i;
mj = j;
}
}
fout << min << " " << mi << " " << mj;
fout.close();
}