Pagini recente » Cod sursa (job #1823110) | Cod sursa (job #615788)
Cod sursa(job #615788)
#include <stdio.h>
#define IN "rj.in"
#define OUT "rj.out"
#define N 101
typedef struct {
int x, y, t;
} Punct;
Punct r[N * N], jl[N * N];
int ic, sc, H[N][N];
int dx[] = {0, -1, -1, -1, 0, 0, 1, 1, 1};
int dy[] = {0, -1, 0, 1, -1, 1, -1, 0, 1};
int main(void) {
int n, m, i, j, xr, yr, xj, yj, k, l, ynou, xnou;
char ch;
Punct P;
(void) freopen(IN, "r", stdin); (void) freopen(OUT, "w", stdout);
(void) scanf("%d %d", &n, &m);
getchar();
/* Citire */
for(i = 1; i <= n; ++i) {
for(j = 1; j <= m; ++j) {
ch = getchar();
if(ch == 'X')
H[i][j] = -1;
else if(ch == 'R')
xr = i, yr = j;
else if(ch == 'J')
xj = i, yj = j;
}
getchar();
}
/* Bordare */
for(i = 0; i <= n + 1; ++i)
H[i][0] = H[i][m + 1] = -1;
for(i = 0; i <= m + 1; ++i)
H[0][i] = H[n + 1][i] = -1;
/* Lee Romeo */
r[ic].x = xr;
r[ic].y = yr;
r[ic].t = 0;
while(ic <= sc) {
P = r[ic++];
for(i = 1; i <= 8; ++i) {
xnou = P.x + dx[i];
ynou = P.y + dy[i];
if(H[xnou][ynou] == 0) {
H[xnou][ynou] = P.t + 1;
++sc;
r[sc].x = xnou;
r[sc].y = ynou;
r[sc].t = P.t + 1;
}
}
}
k = sc;
for(i = 1; i <= n; ++i)
for(j = 1; j <= m; ++j)
if(H[i][j] > 0)
H[i][j] = 0;
/* Lee Julieta */
ic = sc = 0;
jl[ic].x = xj;
jl[ic].y = yj;
jl[ic].t = 0;
while(ic <= sc) {
P = jl[ic++];
for(i = 1; i <= 8; ++i) {
xnou = P.x + dx[i];
ynou = P.y + dy[i];
if(H[xnou][ynou] == 0) {
H[xnou][ynou] = P.t + 1;
++sc;
jl[sc].x = xnou;
jl[sc].y = ynou;
jl[sc].t = P.t + 1;
for(l = 1; l <= k; ++l) {
if(r[l].x == jl[sc].x && r[l].y == jl[sc].y && r[l].t == jl[sc].t) {
printf("%d %d %d\n", jl[sc].t + 1, jl[sc].x, jl[sc].y);
return 0;
}
}
}
}
}
return 0;
}