Cod sursa(job #2153765)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 6 martie 2018 13:59:51
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include<fstream>
using namespace std;
ifstream in ("rj.in");
ofstream out ("rj.out");
int dx[9] = {0,0,0,1,-1,-1,1,-1,1}, dy[9] = {0,1,-1,0,0,-1,1,1,-1};
short rom[101][101], jul[101][101];
char ch[105];
pair<short,short>v[10001];
short x,y,a,b,c,d,n,m,j1,j2,r1,r2,minim;
int main (void) {
    in >> n >> m;
    in.getline (ch+1,101);
    for (int i = 1; i <= n; i ++) {
        in.getline (ch+1,101);
        for (int j = 1; j <= m; j ++) {
            if (ch[j] == 'X') {
                rom[i][j] = -1;
                jul[i][j] = -1;
            }
            if (ch[j] == 'J') {
                jul[i][j] = 1;
                j1 = i;
                j2 = j;
            }
            if (ch[j] == 'R') {
                rom[i][j] = 1;
                r1 = i;
                r2 = j;
            }
        }
    }

    v[1].first = j1;
    v[1].second = j2;
    for (int st = 1, dr = 1; st <= dr; st ++) {
        a = v[st].first;
        b = v[st].second;
        for (int i = 1; i <= 8; i ++) {
            c = a + dx[i];
            d = b + dy[i];
            if (c <= n && c >= 1 && d <= m && d >= 1 && jul[c][d] == 0) {
                dr ++;
                v[dr] = {c,d};
                jul[c][d] = jul[a][b] + 1;
            }
        }
    }
    v[1].first = r1;
    v[1].second = r2;
    for (int st = 1, dr = 1; st <= dr; st ++) {
        a = v[st].first;
        b = v[st].second;
        for (int i = 1; i <= 8; i ++) {
            c = a + dx[i];
            d = b + dy[i];
            if (c <= n && c >= 1 && d <= m && d >= 1 && rom[c][d] == 0) {
                dr ++;
                v[dr] = {c,d};
                rom[c][d] = rom[a][b] + 1;
            }
        }
    }
    minim = 1e4;
    for (int i = 1; i <= n; i ++) {
        for (int j = 1; j <= m; j ++) {
            if (rom[i][j] == jul[i][j] && rom[i][j] != -1&&rom[i][j] != 0) {
                if (minim > rom[i][j]) {
                    minim = rom[i][j];
                    x = i;
                    y = j;
                }
            }
        }
    }
    out <<minim <<" " << x << " " << y;
    return 0;
}