Cod sursa(job #1983331)

Utilizator D3XT3RY0NuTCirstea Ioan Cristian D3XT3RY0NuT Data 21 mai 2017 17:53:11
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.84 kb
#include <fstream>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

short int N, M, xr, yr, xj, yj, x, y, xprim, yprim, prim, ultim, rez, rezx, rezy;
short int vr[102][102];
short int vj[102][102];
short int coada[10000][2];
short int dirx[8] = {0, 0, 1, 1, 1, -1, -1, -1};
short int diry[8] = {1, -1, -1, 0, 1, -1, 0, 1};

int main(){
    f >> N >> M;
    f.get();
    for (int i = 1; i <= N; i++){
        char c[105];
        f.getline(c, 105);
        for (int j = 1; j <= M; j++){
            if (c[j - 1] == 'X'){
                vr[i][j] = -1;
                vj[i][j] = -1;
            }
            else if (c[j - 1] == 'R'){
                xr = i;
                yr = j;
                vr[xr][yr] = 1;
            }
            else if (c[j - 1] == 'J'){
                xj = i;
                yj = j;
                vj[xj][yj] = 1;
            }
        }
    }
    for (int i = 0; i <= N + 1; i++){
        vr[i][0] = -1;
        vj[i][0] = -1;
        vr[i][M + 1] = -1;
        vj[i][M + 1] = -1;
    }
    for (int i = 0; i <= M + 1; i++){
        vr[0][i] = -1;
        vr[M + 1][i] = -1;
        vj[0][i] = -1;
        vj[M + 1][i] = -1;
    }
    coada[0][0] = xr;
    coada[0][1] = yr;
    ultim = 1;
    while(prim < ultim){
        x = coada[prim][0];
        y = coada[prim++][1];
        for (int i = 0; i < 8; i++){
            xprim = x + dirx[i];
            yprim = y + diry[i];
            if (!vr[xprim][yprim]){
                coada[ultim][0] = xprim;
                coada[ultim++][1] = yprim;
                vr[xprim][yprim] = vr[x][y] + 1;
            }
        }
    }
    prim = 0;
    ultim = 1;
    coada[0][0] = xj;
    coada[0][1] = yj;
    while (prim < ultim){
        x = coada[prim][0];
        y = coada[prim++][1];
        for (int i = 0; i < 8; i++){
            xprim = x + dirx[i];
            yprim = y + diry[i];
            if (!vj[xprim][yprim]){
                coada[ultim][0] = xprim;
                coada[ultim++][1] = yprim;
                vj[xprim][yprim] = vj[x][y] + 1;
            }
        }
    }
    rez = 10000;
    for (int i = 1; i <= N; i++){
        for (int j = 1; j <= M; j++){
            if (vr[i][j] == vj[i][j]){
                if (vr[i][j] < rez && vr[i][j] > 0){
                    rez = vr[i][j];
                    rezx = i;
                    rezy = j;
                }
                else if (vr[i][j] == rez){
                    if (i < rezx){
                        rezx = i;
                        rezy = j;
                    }
                    else if (i == rezx){
                        if (j < rezy)
                            rezy = j;
                    }
                }
            }
        }
    }
    g << rez << " " << rezx << " " << rezy;

    return 0;
}