Pagini recente » Cod sursa (job #1427179) | Cod sursa (job #1226406) | Cod sursa (job #2365343) | Cod sursa (job #2031409) | Cod sursa (job #3005277)
#include <iostream>
#include <fstream>
#define MAXN 100
#define MOD 512
int c[MOD][2], st, dr;
bool v[MAXN + 2][MAXN + 2];
int d[MAXN + 2][MAXN + 2][2];
int rlin, rcol, jlin, jcol;
using namespace std;
int lindir[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int coldir[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
void lee(int id){
int lin, col;
st = 0;
dr = 1;
if(id == 0){
c[0][0] = rlin;
c[0][1] = rcol;
} else{
c[0][0] = jlin;
c[0][1] = jcol;
}
d[c[0][0]][c[0][1]][id] = 1;
while(st != dr){
lin = c[st][0];
col = c[st][1];
st ++;
st %= MOD;
for(int dir = 0; dir < 8; dir ++){
int nlin = lin + lindir[dir];
int ncol = col + coldir[dir];
if(v[nlin][ncol] && d[nlin][ncol][id] == 0){
d[nlin][ncol][id] = d[lin][col][id] + 1;
c[dr][0] = nlin;
c[dr][1] = ncol;
dr ++;
dr %= MOD;
}
}
}
}
int main(){
char ch;
int n, m, i, j, mini, minj, min;
FILE *fin, *fout;
fin = fopen("rj.in", "r");
fscanf(fin, "%d%d", &n, &m);
fgetc(fin);
for(i = 1; i <= n; i ++){
for(j = 1; j <= m; j ++){
ch = fgetc(fin);
if(ch == 'X')
v[i][j] = 0;
else{
v[i][j] = 1;
if(ch == 'R'){
rlin = i;
rcol = j;
} else if(ch == 'J'){
jlin = i;
jcol = j;
}
}
}
fgetc(fin);
}
fclose(fin);
lee(0);
lee(1);
min = -1;
for(i = 1; i <= n; i ++){
for(j = 1; j <= m; j ++){
if(d[i][j][0] == d[i][j][1] && d[i][j][0] != 0 && (min == -1 || d[i][j][0] < min)){
min = d[i][j][0];
mini = i;
minj = j;
}
}
}
fout = fopen("rj.out", "w");
fprintf(fout, "%d %d %d\n", min, mini, minj);
fclose(fout);
return 0;
}