Cod sursa(job #2320490)

Utilizator mihaicosmin2011Mihai Cosmin mihaicosmin2011 Data 14 ianuarie 2019 20:08:16
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <fstream>
#include <cstring>
#include <climits>
using namespace std;
int R[103][103], J[103][103];
short int x[10004], y[10004];
char ch[102][102];
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
int i, j, ii, jj, n, m, a, b, c, d, st, dr, k, tt, t, tmin = INT_MAX;
int main()
{
    ifstream f("rj.in");
    ofstream g("rj.out");
    f >> n >> m;
    f.get();
    for(i = 1; i <= n ; i ++)
    {
        for(j = 1; j <= m; j ++)
        {
            f.get(ch[i][j]);
            if(ch[i][j] == 'R')
            {
                a = i;
                b = j;
            }
            else if(ch[i][j] == 'J')
            {
                c = i;
                d = j;
            }
            else if(ch[i][j] == 'X') R[i][j] = J[i][j] = -1;
        }
        f.get();
    }
    st = dr = 1;
    x[dr] = a;
    y[dr] = b;
    R[a][b] = 1;
    while(st <= dr)
    {
        i = x[st];
        j = y[st];
        for(k = 0; k < 8; k ++)
        {
            ii = i + dx[k];
            jj = j + dy[k];
            if(ii >= 1 && ii <= n && jj >= 1 && jj <= m && R[ii][jj] == 0)
            {
                R[ii][jj] = 1 + R[i][j];
                dr ++;
                x[dr] = ii;
                y[dr] = jj;
            }
         }
         st ++;
    }
    memset(x, 0, sizeof(x));
    memset(y, 0, sizeof(y));
    st = dr = 1;
    x[dr] = c;
    y[dr] = d;
    J[c][d] = 1;
    while(st <= dr)
    {
        i = x[st];
        j = y[st];
        for(k = 0; k < 8; k ++)
        {
            ii = i + dx[k];
            jj = j + dy[k];
            if(ii >= 1 && ii <= n && jj >= 1 && jj <= m && J[ii][jj] == 0)
            {
                J[ii][jj] = 1 + J[i][j];
                dr ++;
                x[dr] = ii;
                y[dr] = jj;
            }
        }
        st ++;
    }
    for(i = 1; i <= n; i ++)
        for(j = 1; j <= m; j ++)
    if(R[i][j] == J[i][j] && R[i][j] < tmin && R[i][j] > 0)
    {
        tmin = R[i][j];
        t = i;
        tt = j;
    }
    g << tmin << " " << t << " " << tt;
    return 0;
}