Pagini recente » Cod sursa (job #3212568) | Cod sursa (job #3155736) | Cod sursa (job #1948518) | Cod sursa (job #291875) | Cod sursa (job #3185250)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct Coord{
int l, c;
};
int n, m;
int dl[8] = {-1, 0, 1, 0, -1, -1, 1, 1};
int dc[8] = {0, 1, 0, -1, 1, -1, 1, -1};
int vr[101][101], vj[101][101];
char mat[101][101];
queue<Coord> q;
bool inmat(Coord X){
return (X.l >= 1 && X.c >= 1 && X.l <= n && X.c <= m);
}
void Lee(Coord st, int v[101][101]){
v[st.l][st.c] = 1;
q.push(st);
while(!q.empty()){
Coord curent = q.front();
q.pop();
for(int i = 0; i < 8; i++){
Coord vecin = {curent.l + dl[i], curent.c + dc[i]};
if(inmat(vecin) && v[vecin.l][vecin.c] == 0 && mat[vecin.l][vecin.c] != 'X'){
q.push(vecin);
v[vecin.l][vecin.c] = v[curent.l][curent.c] + 1;
}
}
}
}
int main()
{
fin>>n>>m;
string line;
getline(fin, line);
Coord R, J;
for(int i = 1; i <= n; i++){
getline(fin, line);
for(int j = 1; j <= m; j++){
mat[i][j] = line[j-1];
if(mat[i][j] == 'R'){
R.l = i;
R.c = j;
}
else if(mat[i][j] == 'J'){
J.l = i;
J.c = j;
}
}
}
Lee(R, vr);
Lee(J, vj);
int mini = 100010;
int xmin = 101;
int ymin = 101;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(vr[i][j] == vj[i][j] && vr[i][j] != 0 && vj[i][j] != 0 && mini > vr[i][j]){
mini = vr[i][j];
xmin = i;
ymin = j;
}
}
}
fout<<mini<<" "<<xmin<<" "<<ymin;
return 0;
}