Cod sursa(job #2202827)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 10 mai 2018 00:38:25
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.43 kb
#include <iostream>
#include <fstream>
#include <string>
#define MAX 101
#define MAX_INT 10000000000
using namespace std;
char a[MAX][MAX];
int r[MAX][MAX], J[MAX][MAX], lin[] = {-1, -1, 0, 1, 1, 1, 0, -1}, col[] = {0, 1, 1, 1, 0, -1, -1, -1};
struct
{
    int x;
    int y;
}coada[MAX * MAX];
int main()
{
    int n, m, i, j, rx, ry, jx, jy, inc, sf, linie, coloana, Min = MAX_INT, x, y;
    char c;

    ifstream fin("rj.in");
    ofstream fout("rj.out");
    fin >> n >> m;
    for(i = 0; i <= n; i++)fin.getline(a[i], MAX);
    for(i = 1; i <= n; i++)
        for(j = m; j >= 1; j--)a[i][j] = a[i][j - 1];
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++)
            if(a[i][j] == 'R')
            {
                rx = i;
                ry = j;
            }
            else if(a[i][j] == 'J')
            {
                jx = i;
                jy = j;
            }
    inc = sf = 1;
    coada[inc].x = rx;
    coada[sf].y = ry;
    r[rx][ry] = 1;
    while(inc <= sf)
    {
        for(i = 0; i <= 7; i++)
        {
            linie = coada[inc].x + lin[i];
            coloana = coada[inc].y + col[i];
            if(linie >= 1 && coloana >= 1 && linie <= n && coloana <= m && r[linie][coloana] == 0 && a[linie][coloana] == ' ')
            {
                sf++;
                coada[sf].x = linie;
                coada[sf].y = coloana;
                r[linie][coloana] = r[coada[inc].x][coada[inc].y] + 1;
            }
        }
        inc++;
    }
    inc = sf = 1;
    coada[inc].x = jx;
    coada[sf].y = jy;
    J[jx][jy] = 1;
    while(inc <= sf)
    {
        for(i = 0; i <= 7; i++)
        {
            linie = coada[inc].x + lin[i];
            coloana = coada[inc].y + col[i];
            if(linie >= 1 && coloana >= 1 && linie <= n && coloana <= m && J[linie][coloana] == 0 && a[linie][coloana] == ' ')
            {
                sf++;
                coada[sf].x = linie;
                coada[sf].y = coloana;
                J[linie][coloana] = J[coada[inc].x][coada[inc].y] + 1;
            }
        }
        inc++;
    }
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++)
            if(r[i][j] == J[i][j] && r[i][j] != 0 && Min > r[i][j])
            {
                x = i;
                y = j;
                Min = r[i][j];
            }
    fout << Min << " " << x << " " << y;
    fin.close();
    fout.close();
    return 0;
}