Cod sursa(job #2511134)

Utilizator Dorin07Cuibus Dorin Iosif Dorin07 Data 18 decembrie 2019 11:43:22
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <bits/stdc++.h>
#define N 101
using namespace std;

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

int n, m, a[N][N], sol[N][N], pi1, pi2, pf1, pf2, minim = 205, pozi, pozj;

int dx[8] = {0, 0, 1, -1, -1, 1, -1, 1};
int dy[8] = {1, -1, 0, 0, -1, 1, 1, -1};

queue < pair < int, int > > q;

void citire(){
    char c[101];
    fin>>n>>m;
    fin.getline(c, 101);
    for(int i = 1; i <= n; ++i){
        fin.getline(c,101);
        for(int j = 0; c[j]; ++j){
            if(c[j] == 'X'){
                a[i][j+1] = -1;
                sol[i][j+1] = -1;
            }else if(c[j] == 'R'){
                a[i][j+1] = 1;
                pi1 = i;
                pi2 = j+1;
            }else if(c[j] == 'J') {
                pf1 = i;
                pf2 = j+1;
                sol[i][j+1] = 1;
            }
        }
    }

}

bool verif(int i, int j){
     if(i < 1 || i > n || j < 1 || j > m)
        return false;
     if(a[i][j] == -1)
        return false;
     return true;
}

void Lee(int i, int j, int a[N][N]){
    int i_next, j_next;
    q.push(make_pair(i,j));
    a[i][j] = 1;
    while(!q.empty()){
        i = q.front().first;
        j = q.front().second;
        for(int d = 0; d < 8; ++d){
            i_next = i + dx[d];
            j_next = j + dy[d];
            if(verif(i_next, j_next) && a[i_next][j_next] == 0){
                a[i_next][j_next] = a[i][j] + 1;
                q.push(make_pair(i_next, j_next));
            }
        }
        q.pop();
    }
}

void afisare(){
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            if(a[i][j] == sol[i][j] && sol[i][j] > 0){
                if(sol[i][j] < minim){
                    minim = a[i][j];
                    pozi = i;
                    pozj = j;
                }
            }
        }
    }
    fout<<minim<<' '<<pozi<<' '<<pozj;
}

int main(){
    citire();
    Lee(pi1, pi2, a);
    Lee(pf1, pf2, sol);
    afisare();
}