Cod sursa(job #1807361)

Utilizator BourucLiviuBouruc Petru Liviu BourucLiviu Data 16 noiembrie 2016 13:55:30
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <cstring>

using namespace std;

struct poz
{
    int x, y;
} coada[10205], ri, ji, el;
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1}, dy[] = {0, 1, 1, 1, 0, -1, -1, -1};

int n, m, prim, ultim, R[101][101], J[101][101], Min = 99999999, xMin, yMin;

void Lee(int x, int y, int a[][101])
{
    prim = 1; ultim = 0;
    coada[++ultim].x = x; coada[ultim].y = y;
    while(prim <= ultim)
    {
        el = coada[prim++];
        for(int i = 0; i < 8; ++i)
            if(el.x+dx[i] > 0 && el.x+dx[i] <= n && el.y+dy[i] > 0 && el.y+dy[i] <= m)
                if(!a[el.x+dx[i]][el.y+dy[i]])
                {
                    a[el.x+dx[i]][el.y+dy[i]] = a[el.x][el.y] + 1;
                    coada[++ultim].x = el.x + dx[i]; coada[ultim].y = el.y + dy[i];
                }

    }
}

int main()
{
    char c[256];
    ifstream fin ("rj.in");
    fin >> n >> m;
    fin.get();
    for(int i = 1; i <= n; ++i)
    {
        fin.getline(c+1, 256);
        for(int j = 1; j <= m; ++j)
        {
            if(c[j] == 'X') R[i][j] = -1, J[i][j] = -1;
            else if(c[j] == 'R') ri.x = i, ri.y = j, R[i][j] = 1;
            else if(c[j] == 'J') ji.x = i, ji.y = j, J[i][j] = 1;
        }
    }
    fin.close();

    Lee(ri.x, ri.y, R);
    Lee(ji.x, ji.y, 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] < Min && R[i][j] > 0)
            {
                Min = R[i][j];
                xMin = i;
                yMin = j;
            }

    ofstream fout("rj.out");
    fout << Min << " " << xMin << " " << yMin << " ";
    fout.close();
    return 0;
}