Cod sursa(job #2781407)

Utilizator d_rawGroza Mihai-Octavian d_raw Data 9 octombrie 2021 13:31:27
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <bits/stdc++.h>

using namespace std;

int dx[] = {0, -1, 0, 1, -1, 1, -1, 1};
int dy[] = {-1, 0, 1, 0, 1, -1, -1, 1};
int R[105][105], J[105][105];
int tmin = 100000;
char c;
queue< pair<int, int> > q;
void lee(pair<int, int>p, int a[105][105])
{
    int x, y;
    q.push(p);
    while(q.size()){
        p = q.front();
        q.pop();
        for(int i = 0; i < 8; i++){
            x = dx[i]+p.first;
            y = dy[i]+p.second;
            if(a[x][y] == 0){
                a[x][y] = a[p.first][p.second]+1;
                q.push({x, y});
            }
        }
    }
}
int main(){
    ifstream fin("rj.in");
    ofstream fout("rj.out");

    string s;
    int n, m, ri, rj, ji, jj;
    fin >> n >> m; getline(fin, s);
    for(int i = 0; i <= n+1; i++)
        R[i][0] = R[i][m+1] = J[i][0] = J[i][m+1] = -1;
    for(int j = 0; j <= m+1; j++)
        R[0][j] = R[n+1][j] = J[0][j] = J[n+1][j] = -1;
    for(int i = 1; i <= n; i++) {
        getline(fin, s);
        for(int j = 1; j <= m; j++){
            c = s[j-1];
            if(c == 'R'){
                ri = i;
                rj = j;
                R[i][j] = 1;
            }
            if(c == 'J'){
                ji = i;
                jj = j;
                J[i][j] = 1;
            }
            if(c == 'X')
               R[i][j] = J[i][j] = -1;
            else if(c == ' ')
                R[i][j] = J[i][j] = 0;
        }
    }

        lee({ri, rj}, R);
        lee({ji, jj}, J);
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++){
                    if(R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < tmin) {
                        tmin = R[i][j];
                        ri = i; rj = j;
                    }

            }
        fout << tmin << ' ' << ri << ' ' << rj;

}