Pagini recente » Cod sursa (job #2319912) | Cod sursa (job #2839681) | Cod sursa (job #2315416) | Cod sursa (job #1067518) | Cod sursa (job #2310306)
#include <fstream>
#include <cstring>
#include <climits>
using namespace std;
int R[103][103], J[103][103];
short int x[10004], y[10004];
char ch[102][102];
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
int i, j, ii, jj, n, m, a, b, c, d, st, dr, k, tt, t, tmin = INT_MAX;
int main()
{
ifstream f("rj.in");
ofstream g("rj.out");
f >> n >> m;
f.get();
for(i = 1; i <= n ; i ++)
{
for(j = 1; j <= m; j ++)
{
f.get(ch[i][j]);
if(ch[i][j] == 'R')
{
a = i;
b = j;
}
else if(ch[i][j] == 'J')
{
c = i;
d = j;
}
else if(ch[i][j] == 'X') R[i][j] = J[i][j] = -1;
}
f.get();
}
st = dr = 1;
x[dr] = a;
y[dr] = b;
R[a][b] = 1;
while(st <= dr)
{
i = x[st];
j = y[st];
for(k = 1; k <= 8; k ++)
{
ii = i + dx[k];
jj = j + dy[k];
if(ii >= 1 && ii <= n && jj >= 1 && jj <= m && R[ii][jj] == 0)
{
R[ii][jj] = 1 + R[i][j];
dr ++;
x[dr] = ii;
y[dr] = jj;
}
}
st ++;
}
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
st = dr = 1;
x[dr] = c;
y[dr] = d;
J[c][d] = 1;
while(st <= dr)
{
i = x[st];
j = y[st];
for(k = 1; k <= 8; k ++)
{
ii = i + dx[k];
jj = j + dy[k];
if(ii >= 1 && ii <= n && jj >= 1 && jj <= m && J[ii][jj] == 0)
{
J[ii][jj] = 1 + J[i][j];
dr ++;
x[dr] = ii;
y[dr] = jj;
}
}
st ++;
}
for(i = 1; i <= n; i ++)
for(j = 1; j <= m; j ++)
if(R[i][j] == J[i][j] && R[i][j] < tmin && R[i][j] > 0)
{
tmin = R[i][j];
t = i;
tt = j;
}
g << tmin << " " << t << " " << tt;
return 0;
}