Cod sursa(job #2509917)

Utilizator radu_stStoican Radu radu_st Data 15 decembrie 2019 11:17:55
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <fstream>
#include <queue>
#include <string>
using namespace std;
queue<int> linie;
queue<int> coloana;
int dl[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dc[8] = { 0, 1, 1, 1, 0, -1, -1, -1};
int x, y, n, m, lin, col, lin1, col1, lr, cr, lj, cj, k;
int r[105][105], j[105][105];
char litera;
string enter;
int main(){
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    fin >> n >> m;
    getline(fin, enter);
    for(x = 1; x <= n; x++){
        getline(fin, enter);
        for(y = 0; y < m; y++){
            if(enter[y] == 'X')
                r[x][y + 1] = -1, j[x][y + 1] = -1;
            if(enter[y] == ' ')
                r[x][y + 1] = 0, j[x][y + 1] = 0;
            if(enter[y] == 'R')
                r[x][y + 1] = 1, j[x][y + 1] = 0, lr = x, cr = y + 1;
            if(enter[y] == 'J')
                r[x][y + 1] = 0, j[x][y + 1] = 1, lj = x, cj = y + 1;
        }
    }
    linie.push(lr);
    coloana.push(cr);
    while(!linie.empty()){
        lin = linie.front(), linie.pop();
        col = coloana.front(), coloana.pop();
        for(k = 0; k < 8; k++){
            lin1 = lin + dl[k];
            col1 = col + dc[k];
            if(lin1 >= 1 && lin1 <= n && col1 >= 1 && col1 <= m && r[lin1][col1] == 0){
                r[lin1][col1] = r[lin][col] + 1;
            	linie.push(lin1);
                coloana.push(col1);
            }
        }
    }
    linie.push(lj);
    coloana.push(cj);
    while(!linie.empty()){
        lin = linie.front(), linie.pop();
        col = coloana.front(), coloana.pop();
        for(k = 0; k < 8; k++){
            lin1 = lin + dl[k];
            col1 = col + dc[k];
            if(lin1 >= 1 && lin1 <= n && col1 >= 1 && col1 <= m && j[lin1][col1] == 0){
                j[lin1][col1] = j[lin][col] + 1;
            	linie.push(lin1);
                coloana.push(col1);
            }
        }
    }
    int li = 0, ci = 0, tmin = 10003;
    for(x = n; x >= 1; x--){
        for(y = m; y >= 1; y--){
            if(r[x][y] == j[x][y] && r[x][y] != -1 && r[x][y] != 0 && r[x][y] <= tmin){
                tmin = r[x][y], li = x, ci = y;
            }
        }
    }
    fout << tmin << ' ' << li << ' ' << ci;
    fin.close();
    fout.close();
    return 0;
}