Cod sursa(job #2119351)

Utilizator mariusn01Marius Nicoli mariusn01 Data 31 ianuarie 2018 23:26:17
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <fstream>
#include <cstring>
#define DIM 102
using namespace std;

int A[DIM][DIM], B[DIM][DIM], C[DIM][DIM], c[2][DIM * DIM];
int n, minim, iminim, jminim, m, i1, j1, i2, j2;
char s[DIM];

int di[] = {0, 0,1,-1,1,-1,-1, 1};
int dj[] = {1,-1,0, 0,1,-1, 1,-1};

void coada(int is, int js, int M[DIM][DIM]) {
    int p = 1;
    int u = 1;
    c[0][u] = is;
    c[1][u] = js;
    M[is][js] = 1;
    while (p <= u) {
        int ic = c[0][p];
        int jc = c[1][p];
        for(int d = 0; d<8;d++) {
            int iv = ic + di[d];
            int jv = jc + dj[d];

            if (iv>=1 && iv<=n && jv >= 1 && jv <= m && M[iv][jv] == 0 && A[iv][jv] == 0) {
                u++;
                c[0][u] = iv;
                c[1][u] = jv;
                M[iv][jv] = 1 + M[ic][jc];
            }
        }
        p++;
    }
}

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

int main () {
    fin>>n>>m;
    for (int i=1;i<=n;i++) {
        fin.get();
        fin.get(s+1, DIM);
        for (int j=1;j<=strlen(s+1);j++) {
            if (s[j] == 0 || s[j] == ' ')
                A[i][j] = 0;
            if (s[j] == 'X')
                A[i][j] = -1;
            if (s[j] == 'R') {
                i1 = i;
                j1 = j;
                A[i][j] = 0;
            }
            if (s[j] == 'J') {
                i2 = i;
                j2 = j;
                A[i][j] = 0;
            }
        }
    }

    coada(i1, j1, B);
    coada(i2, j2, C);
    minim = DIM * DIM;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            if (B[i][j] > 0 && B[i][j] == C[i][j]) {
                if (B[i][j] <minim) {
                    minim = B[i][j];
                    iminim = i;
                    jminim = j;
                }
            }

    fout << minim <<" "<<iminim<<" "<<jminim;

    return 0;
}