Pagini recente » Cod sursa (job #2357172) | Cod sursa (job #1061512) | Cod sursa (job #944018) | Cod sursa (job #743086) | Cod sursa (job #2511134)
#include <bits/stdc++.h>
#define N 101
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, a[N][N], sol[N][N], pi1, pi2, pf1, pf2, minim = 205, pozi, pozj;
int dx[8] = {0, 0, 1, -1, -1, 1, -1, 1};
int dy[8] = {1, -1, 0, 0, -1, 1, 1, -1};
queue < pair < int, int > > q;
void citire(){
char c[101];
fin>>n>>m;
fin.getline(c, 101);
for(int i = 1; i <= n; ++i){
fin.getline(c,101);
for(int j = 0; c[j]; ++j){
if(c[j] == 'X'){
a[i][j+1] = -1;
sol[i][j+1] = -1;
}else if(c[j] == 'R'){
a[i][j+1] = 1;
pi1 = i;
pi2 = j+1;
}else if(c[j] == 'J') {
pf1 = i;
pf2 = j+1;
sol[i][j+1] = 1;
}
}
}
}
bool verif(int i, int j){
if(i < 1 || i > n || j < 1 || j > m)
return false;
if(a[i][j] == -1)
return false;
return true;
}
void Lee(int i, int j, int a[N][N]){
int i_next, j_next;
q.push(make_pair(i,j));
a[i][j] = 1;
while(!q.empty()){
i = q.front().first;
j = q.front().second;
for(int d = 0; d < 8; ++d){
i_next = i + dx[d];
j_next = j + dy[d];
if(verif(i_next, j_next) && a[i_next][j_next] == 0){
a[i_next][j_next] = a[i][j] + 1;
q.push(make_pair(i_next, j_next));
}
}
q.pop();
}
}
void afisare(){
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j){
if(a[i][j] == sol[i][j] && sol[i][j] > 0){
if(sol[i][j] < minim){
minim = a[i][j];
pozi = i;
pozj = j;
}
}
}
}
fout<<minim<<' '<<pozi<<' '<<pozj;
}
int main(){
citire();
Lee(pi1, pi2, a);
Lee(pf1, pf2, sol);
afisare();
}