Pagini recente » Borderou de evaluare (job #1159322) | Borderou de evaluare (job #62016) | Borderou de evaluare (job #205323) | Borderou de evaluare (job #72392) | Cod sursa (job #2941388)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int a[201][201], d1[201][201], d2[201][201];
int i ,j, m, n, x, y, Max=9e5, k;
char s[101];
const int dx[8] = {-1,-1,-1,0,0,1,1,1}, dy[8] = {-1,0,1,-1,1,-1,0,1};
vector < pair<int, int> > v;
inline int check(int i, int j){
if(j >= 1 && j <= m && i >= 1 && i <= n)
return true;
return false;
}
void Lee(int xs, int ys, int traseu[201][201]){
queue< pair<int, int> > q;
q.push(make_pair(xs, ys));
while(!q.empty()){
int i = q.front().first;
int j = q.front().second;
for(k=0;k<=7;k++){
int new_i = i + dx[k];
int new_j = j + dy[k];
if(!a[new_i][new_j] && !traseu[new_i][new_j] && check(new_i, new_j)){
traseu[new_i][new_j] = traseu[i][j] + 1;
q.push(make_pair(new_i, new_j));
}
}
q.pop();
}
}
int main(void){
ios::sync_with_stdio(false);
fin.tie(0);
v.push_back(make_pair(0, 0));
fin>>n>>m;
for(i=0;i<=n;i++){
fin.getline(s, sizeof(s));
for(j=0;j<m;j++){
if(s[j] == ' ')
a[i][j+1] = 0;
else
if(s[j] == 'R' || s[j] == 'J'){
v.push_back(make_pair(i, j+1));
a[i][j+1] = 0;
}
else {
a[i][j+1] = 1;
}
}
}
for(unsigned int i=1;i<v.size();i++){
if(i == 1)
Lee(v[1].first, v[1].second, d1);
if(i == 2)
Lee(v[2].first, v[2].second, d2);
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if((d1[i][j] == d2[i][j]) && !a[i][j] && d1[i][j]){
if(d1[i][j] < Max){
Max = d1[i][j];
x = i;
y = j;
}
}
}
}
fout<<++Max<<" "<<x<<" "<<y;
return 0;
}