Pagini recente » Cod sursa (job #1487119) | Cod sursa (job #506529) | Cod sursa (job #169753) | Cod sursa (job #2443873) | Cod sursa (job #3153454)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int NMAX = 105;
int romeo[NMAX][NMAX], julieta[NMAX][NMAX], drum[NMAX][NMAX], n, m;
string a[NMAX];
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
struct Pozitie{
int x, y;
}pozRomeo, pozJulieta;
bool inMat(int i, int j){
return i >= 1 && i <= n && j >= 1 && j <= m;
}
void lee(int path[NMAX][NMAX], int i, int j, int iFinal, int jFinal){
path[i][j] = 1;
queue<pair<int, int>> q;
q.push({i, j});
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
for(int d = 0; d < 4; ++d){
int inou = x + dx[d];
int jnou = y + dy[d];
if(inMat(inou, jnou) && drum[inou][jnou] == 0 && path[inou][jnou] == 0){
path[inou][jnou] = path[x][y] + 1;
q.push({inou, jnou});
if(inou == iFinal && jnou == jFinal){
return;
}
}
}
}
}
int main(){
f >> n >> m;
// f.get();
for(int i = 1; i <= n; ++i){
getline(f, a[i]);
for(int j = 0; j < a[i].size(); ++j){
if(a[i][j] == 'R'){
pozRomeo.x = i;
pozRomeo.y = j + 1;
}
if(a[i][j] == 'J'){
pozJulieta.x = i;
pozJulieta.y = j + 1;
}
if(a[i][j] == 'X'){
drum[i][j + 1] = -1;
}
}
}
lee(romeo, pozRomeo.x, pozRomeo.y, pozJulieta.x, pozJulieta.y);
lee(julieta, pozJulieta.x, pozJulieta.y, pozRomeo.x, pozRomeo.y);
int res = 1e9, x, y;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j){
if(romeo[i][j] == julieta[i][j] && res > romeo[i][j] && romeo[i][j]){
res = romeo[i][j];
x = i;
y = j;
}
}
}
g << res - 1 << " " << x << " " << y;
return 0;
}