Cod sursa(job #2556054)

Utilizator Cosmin3105Cosmin Colceru Cosmin3105 Data 24 februarie 2020 17:35:17
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int n, m;
char s[105];
int matR[105][105], matJ[105][105];

queue < pair <int,int> > coadaR;
queue < pair <int,int> > coadaJ;

int dx[8] = {-1,-1, 0, 1, 1, 1, 0,-1};
int dy[8] = { 0, 1, 1, 1, 0,-1,-1,-1};

void citire()
{
    fin >> n >> m;
    fin.get();
    for(int i = 1; i <= n; i++){
        fin.getline(s, m+1);
        for(int j = 0; j < m; j++){
            if(s[j] == 'X')
                matJ[i][j+1] = matR[i][j+1] = -1;
            else if(s[j] == 'R'){
                coadaR.push(make_pair(i,j+1));
                matR[i][j+1] = 1;
            }
            else if(s[j] == 'J'){
                coadaJ.push(make_pair(i, j+1));
                matJ[i][j+1] = 1;
            }

        }
    }
}

void bordare()
{
    for(int i = 0; i <= n+1; i++){
        matR[i][0] = matJ[i][0] = -1;
        matR[i][m+1] = matJ[i][m+1] = -1;
    }
    for(int i = 0; i <= m+1; i++){
        matR[0][i] = matJ[0][i] = -1;
        matR[n+1][i] = matJ[n+1][i] = -1;
    }
}

void lee(int mat[105][105], queue < pair <int,int> > coada)
{
    while(!coada.empty()){
        int x = coada.front().first;
        int y = coada.front().second;
        coada.pop();

        for(int i = 0; i < 8; i++){
            int x_nou = x + dx[i];
            int y_nou = y + dy[i];

            if(mat[x_nou][y_nou] == 0){
                mat[x_nou][y_nou] = mat[x][y] + 1;
                coada.push(make_pair(x_nou,y_nou));
            }
        }
    }
}

int main()
{
    citire();
    bordare();
    lee(matR, coadaR);
    lee(matJ, coadaJ);

    int tmin = 10000, xf, yf;

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(matR[i][j] == matJ[i][j] && matJ[i][j] < tmin && matJ[i][j] > 0){
                tmin = matJ[i][j];
                xf = i;
                yf = j;
            }
        }
    }

    fout << tmin << " " << xf << " " << yf;

    return 0;

}