Cod sursa(job #3164728)

Utilizator luc3lexaAlexandrescu Luca luc3lexa Data 4 noiembrie 2023 10:35:05
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.22 kb
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m;
const int di[] = {0,1,0,-1,1,1,-1,-1};
const int dj[] = {1,0,-1,0,1,-1,-1,1};
int a[110][110],b[110][110];
int matr[110][110],matj[110][110];
queue<pair<int,int>> q;
bool inmat(int i,int j){
    if(i >=1 && i <= n && j >=1 && j <= m){
        return 1;
    };
    return 0;
}
void Lee(int istart,int jstart,int mat[][110]){
    while(!q.empty()){
        q.pop();
    };
    for(int i = 1; i <=n; i++){
        for(int j = 1; j <=m; j++){
            b[i][j] = 0;
        }
    };
    mat[istart][jstart] = 1;
    b[istart][jstart] = -1;
    q.push(make_pair(istart,jstart));
    while(!q.empty()){
        int i = q.front().first;
        int j = q.front().second;
        for(int k = 0; k <8; k++){
            int ii = i+di[k];
            int jj = j+dj[k];
            if(inmat(ii,jj) && b[ii][jj] != -1 && a[ii][jj] == 0){
                b[ii][jj] = -1;
                mat[ii][jj] = mat[i][j] + 1;
                q.push(make_pair(ii,jj));
            }
        };
        q.pop();
    }
}
int main()
{
    fin >> n >> m;
    fin.ignore();
    char l[110];
    int ir,jr;
    int ij,jjj;
    for(int i = 1; i <=n; i++){
        fin.getline(l,110);
        for(int j = 1; j <=m; j++){
            if(l[j-1] == 'X'){
                a[i][j] = 1;
            }else if(l[j-1] == ' '){
                a[i][j] = 0;
            }else if(l[j-1] == 'R'){
                a[i][j] = -1;
                ir = i;
                jr = j;
            }else if(l[j-1] == 'J'){
                a[i][j] = -1;
                ij = i;
                jjj = j;
            }
        }
    };
    /*for(int i = 1; i <=n; i++,cout << endl){
        for(int j = 1; j <=m; j++){
            cout << a[i][j] << " ";
        }
    }
    cout << endl;*/
    Lee(ir,jr,matr);
    /*for(int i = 1; i <=n; i++,cout << endl){
        for(int j = 1; j <=m; j++){
            cout << matr[i][j] << " ";
        }
    }
    cout << endl;*/
    Lee(ij,jjj,matj);
      /*  for(int i = 1; i <=n; i++,cout << endl){
        for(int j = 1; j <=m; j++){
            cout << matj[i][j] << " ";
        }
    }
    cout << endl;
*/
    int tmin = INT_MAX;
    int xr,yr;
    for(int i = 1; i <=n; i++){
        for(int j = 1; j <=m; j++){
            if(a[i][j] == 0 && matr[i][j] != 0 && matj[i][j]!=0){
                if(matr[i][j] == matj[i][j]){
                   if(matr[i][j] < tmin){
                    tmin = matr[i][j];
                    xr = i;
                    yr = j;
                   }else if(matr[i][j] == tmin){
                       if(i < xr){
                        tmin = matr[i][j];
                         xr = i;
                         yr = j;
                       }else if(i == xr){
                       if(j < yr){
                         tmin = matr[i][j];
                         xr = i;
                         yr = j;
                       };
                       }
                   }
                }
            }
        }
    };
    fout << tmin << " " << xr << " " << yr;
    return 0;
}