Cod sursa(job #1983339)

Utilizator D3XT3RY0NuTCirstea Ioan Cristian D3XT3RY0NuT Data 21 mai 2017 18:25:54
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <fstream>
#include <queue>

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 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[N + 1][i] = -1;
        vj[0][i] = -1;
        vj[N + 1][i] = -1;
    }
    queue<short int> qx;
    queue<short int> qy;
    qx.push(xr);
    qy.push(yr);
    while(!qx.empty()){
        x = qx.front();
        y = qy.front();
        for (int i = 0; i < 8; i++){
            xprim = x + dirx[i];
            yprim = y + diry[i];
            if (vr[xprim][yprim] == 0){
                qx.push(xprim);
                qy.push(yprim);
                vr[xprim][yprim] = vr[x][y] + 1;
            }
        }
        qx.pop();
        qy.pop();
    }
    qx.push(xj);
    qy.push(yj);
    while (!qx.empty()){
        x = qx.front();
        y = qy.front();
        for (int i = 0; i < 8; i++){
            xprim = x + dirx[i];
            yprim = y + diry[i];
            if (vj[xprim][yprim] == 0){
                qx.push(xprim);
                qy.push(yprim);
                vj[xprim][yprim] = vj[x][y] + 1;
            }
        }
        qx.pop();
        qy.pop();
    }
    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;
                }
            }
        }
    }
    g << rez << " " << rezx << " " << rezy;

    return 0;
}