Cod sursa(job #2952470)

Utilizator VertimaXxFlorea Vlad VertimaXx Data 9 decembrie 2022 12:13:22
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#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;
}