Cod sursa(job #2374791)

Utilizator CristianSoareSoare Cristian Costantin CristianSoare Data 7 martie 2019 20:30:55
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <fstream>
#include <cstring>
using namespace std;

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

struct pos{
    int x, y;
};

pos Coada[105*105];
int a[105][105], prim, ultim, n, m, b[105][105], c[105][105];
int o[] = {1, 0, -1, 0, 1, -1, 1, -1};
int v[] = {0, 1, 0, -1, 1, -1, -1, 1};

void LeeR(){
    int i, j, k;
    while (prim <= ultim){
        prim++;
        i = Coada[prim].x;
        j = Coada[prim].y;
        for (k = 0;k < 8;k++){
            int _i, _j;
            _i = i+v[k];
            _j = j+o[k];
            if (_i > 0 && _j > 0 && _i <= n && j <= m && b[_i][_j] == 0 && a[_i][_j] == 0){
                ultim++;
                Coada[ultim].x = _i;
                Coada[ultim].y = _j;
                b[_i][_j] = b[i][j]+1;
            }
        }
    }
}

void LeeJ(){
    int i, j, k;
    while (prim <= ultim){
        prim++;
        i = Coada[prim].x;
        j = Coada[prim].y;
        for (k = 0;k < 8;k++){
            int _i, _j;
            _i = i+v[k];
            _j = j+o[k];
            if (_i > 0 && _j > 0 && _i <= n && j <= m && c[_i][_j] == 0 && a[_i][_j] == 0){
                ultim++;
                Coada[ultim].x = _i;
                Coada[ultim].y = _j;
                c[_i][_j] = c[i][j]+1;
            }
        }
    }
}

int main(){
    int i, j, Jx, Jy, tmin = 99999, pozx, pozy;
    char s[105];
    fin >> n >> m;
    fin.get();
    for (i = 1;i <= n;i++){
        fin.getline(s, sizeof(s));
        for (j = 1;j <= m;j++){
            if (s[j-1] == 'X')
                a[i][j] = -1;
            else if (s[j-1] == 'R'){
                a[i][j] = 1;
                b[i][j] = 1;
                ultim++;
                Coada[ultim].x = i;
                Coada[ultim].y = j;
            }
            else if (s[j-1] == 'J'){
                a[i][j] = 1;
                b[i][j] = 1;
                Jx = i;
                Jy = j;
            }
            else a[i][j] = 0;
        }
    }
    LeeR();
    prim = 0;
    ultim = 1;
    Coada[ultim].x = Jx;
    Coada[ultim].y = Jy;
    c[Jx][Jy] = 1;
    LeeJ();
    for (i = 1;i <= n;i++)
        for (j = 1;j <= m;j++)
            if (b[i][j] == c[i][j] && b[i][j] > 1){
                if (tmin > b[i][j]){
                    tmin = b[i][j];
                    pozx = i;
                    pozy = j;
                }
            }
    fout << tmin << " " << pozx << " " << pozy;
    return 0;
}