Pagini recente » Cod sursa (job #3166968) | Cod sursa (job #1203687) | Cod sursa (job #1258014) | Cod sursa (job #1796944) | Cod sursa (job #885223)
Cod sursa(job #885223)
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
const int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int R[105][105], J[105][105], m, n, t = 2000000;
struct tail {
int x, y;
} coada[10005], sr, sj, meet;
void Lee (int a[][105], tail s, tail f);
int main ()
{
char v[105];
ifstream fin ("rj.in");
fin >> m >> n;
fin.get();
for (int i = 0; i < m; ++i)
{
fin.getline (v, 105);
for (int j = 0; j < n; ++j)
{
if (v[j] == 'X')
R[i][j] = J[i][j] = -1;
if (v[j] == 'R')
sr.x = i, sr.y = j;
if (v[j] == 'J')
sj.x = i, sj.y = j;
}
}
fin.close ();
ofstream fout ("rj.out");
Lee (R, sr, sj);
Lee (J, sj, sr);
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if (R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < t)
{
meet.x = i;
meet.y = j;
t = R[i][j];
}
fout << t << " " << meet.x + 1 << " " << meet.y + 1;
fout.close ();
return 0;
}
void Lee (int a[][105], tail s, tail f)
{
int st, dr;
st = dr = 0;
coada[dr].x = s.x;
coada[dr++].y = s.y;
a[s.x][s.y] = 1;
while (st < dr)
{
int i = coada[st].x;
int j = coada[st].y;
for (int k = 0; k < 8; k++)
{
int ii = i + dx[k];
int jj = j + dy[k];
if (ii >= 0 && jj >= 0 && ii < m && jj < n && !a[ii][jj])
{
a[ii][jj] = a[i][j] + 1;
coada[dr].x = ii;
coada[dr++].y = jj;
}
}
st++;
}
}