Cod sursa(job #3185251)

Utilizator GabrielMarfonMarfon Gabriel GabrielMarfon Data 18 decembrie 2023 17:01:50
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.78 kb
#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 = 1e6;
    int xmin=1001;
    int ymin=1001;
    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;
}