Cod sursa(job #2941388)

Utilizator AdrianRosuRosu Adrian Andrei AdrianRosu Data 17 noiembrie 2022 18:18:08
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#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;
}