Cod sursa(job #2496076)

Utilizator alexalexandra2004Alexandra Costache alexalexandra2004 Data 20 noiembrie 2019 10:38:31
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.69 kb
#include <fstream>

using namespace std;
struct ura
{
    int l, c;
};

ifstream in ("rj.in");
ofstream out ("rj.out");
ura coada [10001];
int dirl[8] = {-1, 0, 1, 0, 1, 1, -1, -1};
int dirc[8] = {0, 1, 0, -1, 1, -1, 1, -1};

int a[101][101], b[101][101];

int main()
{
    int inc = 1, sf = 1, n, m, i, j, lr, cr, lj, cj, lin, col, lin1, col1, minn = 10000;
    char s;
    in >> n >> m;
    in.get(s);

     for(i = 0; i <= n + 1; i++) {

        a[i][0] = -1;
        b[i][0] = -1;
        a[i][m+1] = -1;
        b[i][m+1] = -1;
    }

    for(j = 0; j <= m + 1; j++) {
        a[0][j] = -1;
        b[0][j] = -1;
        a[n+1][j] = -1;
        b[n+1][j] = -1;
    }


    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= m; j++)
        {
            in.get(s);
            if(s == 'R')
            {
                a[i][j] = 1;
                b[i][j] = 0;
                lr = i;
                cr = j;
            }
            else if(s == 'J')
            {

                a[i][j] = 0;
                b[i][j] = 0;
                lj = i;
                cj = j;
            }
            else if(s == 'X')
            {

                a[i][j] = -1;
                b[i][j] = -1;
            }
            else
            {

                a[i][j] = 0;
                b[i][j] = 0;
            }
        }
        in.get(s);
    }

    coada[1].l = lr;
    coada[1].c = cr;
    a[lr][cr] = 1;

    while(inc <= sf) {
        lin = coada[inc].l;
        col = coada[inc].c;
        for(i = 0; i < 8; i++) {
            lin1 = lin + dirl[i];
            col1 = col + dirc[i];
            if(a[lin1][col1] == 0) {
                sf++;
                coada[sf].l = lin1;
                coada[sf].c = col1;
                a[lin1][col1] = a[lin][col] + 1;
            }
        }
        inc++;
    }
    sf = inc = 1;
    coada[1].l = lj;
    coada[1].c = cj;
    b[lj][cj] = 1;

    while(inc <= sf) {
        lin = coada[inc].l;
        col = coada[inc].c;

        for(i = 0; i < 8; i++) {
            lin1 = lin+dirl[i];
            col1 = col + dirc[i];
            if(b[lin1][col1] == 0) {
                sf++;
                coada[sf].l = lin1;
                coada[sf].c = col1;
                b[lin1][col1] = b[lin][col] + 1;
            }
        }
        inc++;
    }

    int i1, j1;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++) {
            if(a[i][j] == b[i][j] && a[i][j] > 0 && a[i][j] < minn) {
                minn = a[i][j];
                i1 = i;
                j1 = j;
            }
        }

    out << minn << " " << i1 << " " << j1;


    return 0;
}