Cod sursa(job #2653611)

Utilizator Robert.BrindeaBrindea Robert Robert.Brindea Data 28 septembrie 2020 17:13:11
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

const int MAXN = 115;
ifstream fin ("rj.in");
ofstream fout ("rj.out");

queue<pair<int, int> > q;
int n, m;
int a[MAXN][MAXN];
int b[MAXN][MAXN];

int r1, r2, j1, j2;

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

void lee(int start1, int start2, int m[MAXN][MAXN])
{
    q.push({start1, start2});
    while(!q.empty())
    {
        int x = q.front().first, y = q.front().second;
        q.pop();
        for(int i = 0; i < 8; i++)
        {
            int nx = x + dx[i];
            int ny = y + dy[i];

            if(m[nx][ny] == 0)
            {
                m[nx][ny] = m[x][y] + 1;
                q.push({nx, ny});
            }
        }
    }
}

int main()
{
    char s[MAXN];
    fin >> n >> m;
    fin.get();

    for(int i = 0; i <= n+1; i++)
        a[i][0] = a[i][m+1] = b[i][m+1] = b[i][0] = -1;
    for(int i = 0; i <= m+1; i++)
        a[0][i] = a[n+1][i] = b[0][i] = b[n+1][i] = -1;

    for(int i = 1; i <= n; i++){
        fin.getline(s+1, 200, '\n');
        for(int j = 1; j <= m; j++){
            if(s[j] == 'R')
            {
                r1 = i;
                r2 = j;
                a[i][j] = 1;
            }
            else if(s[j] == 'J')
            {
                j1 = i;
                j2 = j;
                b[i][j] = 1;
            }
            else if(s[j] == 'X')
                a[i][j] = b[i][j] = -1;
        }
    }
    lee(r1, r2, a);
    lee(j1, j2, b);

    int resx, resy, mn = MAXN*MAXN;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            if(a[i][j] < mn && a[i][j] != 0)
            {
                if(a[i][j] == b[i][j])
                {
                    mn = a[i][j];
                    resx = i;
                    resy = j;
                }
            }
        }
    }
    fout << mn-1 << " " << resx << " " << resy;
    return 0;
}