Pagini recente » Cod sursa (job #2748871) | Cod sursa (job #2701176) | Cod sursa (job #1335837) | Cod sursa (job #1042382) | Cod sursa (job #2952470)
#include <bits/stdc++.h>
using namespace std;
ofstream fout("rj.out");
ifstream fin("rj.in");
char x[102][102];
int drumminim = INT_MAX,a[102][102],n,m,pozi,pozj,b[102][102];
int di[] = {1,1,1,-1,-1,-1,0,0};
int dj[] = {0,1,-1,0,1,-1,1,-1};
queue<pair<int,int>> codita;
pair<int,int> R, J;
string str;
int main(void){
fin >> n >> m;
fin.ignore();
for(int i = 1;i<=n;i++){
getline(fin,str);
for(int j = 1;j<=n;j++){
x[i][j] = str[j-1];
if(x[i][j] == 'J'){
J.first = i;
J.second = j;
}else if(x[i][j] == 'R'){
R.first = i;
R.second = j;
}
}
}
a[J.first][J.second] = b[R.first][R.second] = 1;
codita.push(J);
while(!codita.empty()){
int i = codita.front().first;
int j = codita.front().second;
codita.pop();
for(int k = 0;k<8;k++){
int iv = i + di[k];
int jv = j + dj[k];
if(iv >= 1 && jv >= 1 && iv <= n && jv <= m && x[iv][jv] != 'X' && a[iv][jv] == 0){
codita.push(make_pair(iv,jv));
a[iv][jv] = a[i][j] + 1;
}
}
}
codita.push(R);
while(!codita.empty()){
int i = codita.front().first;
int j = codita.front().second;
codita.pop();
for(int k = 0;k<8;k++){
int iv = i + di[k];
int jv = j + dj[k];
if(iv >= 1 && jv >= 1 && iv <= n && jv <= m && x[iv][jv] != 'X' && b[iv][jv] == 0){
codita.push(make_pair(iv,jv));
b[iv][jv] = b[i][j] + 1;
}
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
if(a[i][j] == b[i][j]&& a[i][j] != 0){
if(drumminim > a[i][j]){
drumminim = a[i][j];
pozi = i;
pozj = j;
}
}
}
}
fout << drumminim << ' ' << pozi << ' ' << pozj;
}