Cod sursa(job #2667825)

Utilizator marianeacsuNeacsu Maria marianeacsu Data 3 noiembrie 2020 21:40:52
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <fstream>
#define N 105

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

int lr, cr, lj, cj;
int a[N][N], n, m;
int b[N][N];
int dl[8] = { 0,0,-1,1,-1,1,-1,1 };
int dc[8] = { -1,1,0,0,1,-1,-1,1 };

void Citire()
{
    int i, j;
    char s[102];
    fin >> n >> m;
    fin.get();
    for (i = 1; i <= n; i++)
    {
        fin.getline(s, 102);
        for (j = 0; j < m; j++)
        {
            if (s[j] == 'X')
                a[i][j + 1] = b[i][j + 1] = -1;
            if (s[j] == ' ')
                a[i][j + 1] = b[i][j + 1] = 0;
            if (s[j] == 'R')
            {
                lr = i;
                cr = j + 1;
                a[i][j + 1] = b[i][j + 1] = 0;
            }
            if (s[j] == 'J')
            {
                lj = i;
                cj = j + 1;
                a[i][j + 1] = b[i][j + 1] = 0;
            }
        }
    }
}

void Bordare(int x[][N])
{
    int i;
    for (i = 0; i <= m + 1; i++) x[0][i] = x[n + 1][i] = -1;
    for (i = 0; i <= n + 1; i++) x[i][0] = x[i][m + 1] = -1;
}

void Lee(int x[][N], int li, int ci)
{
    int L[N * N], C[N * N], pr, ul;
    int l, c, lv, cv, k;
    x[li][ci] = 1;
    L[1] = li, C[1] = ci; pr = ul = 1;
    while (pr <= ul)
    {
        l = L[pr]; c = C[pr]; pr++;
        for (k = 0; k < 8; k++)
        {
            lv = l + dl[k];
            cv = c + dc[k];
            if (x[lv][cv] == 0)
            {
                x[lv][cv] = x[l][c] + 1;
                ul++; L[ul] = lv; C[ul] = cv;
            }
        }
    }
}


void Rezolvare()
{
    int i, j, imin, jmin, min = 10000000;
    Citire();
    Bordare(a);
    Bordare(b);
    Lee(a, lr, cr);
    Lee(b, lj, cj);
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
            if (a[i][j] == b[i][j] && a[i][j] > 0)
                if (a[i][j] < min)
                {
                    min = a[i][j];
                    imin = i;
                    jmin = j;
                }
    fout << min << " " << imin << " " << jmin;
}

int main()
{
    Rezolvare();
    return 0;
}