Cod sursa(job #2665208)

Utilizator luanastLuana Strimbeanu luanast Data 30 octombrie 2020 13:22:29
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, iR, jR, iJ, jJ, minim, soli, solj, cnt;
string s;
char ch;
char a[101][101];
int R[101][101], J[101][101];
int di[] = {-1,1,0,0,1,1,-1,-1};
int dj[] = {0,0,1,-1,1,-1,1,-1};

struct solutie{
    int val, x, y;
}v[100*100];

bool cmp(solutie a, solutie b){
    if(a.val == b.val){
        if(a.x == b.x)
            return a.y < b.y;
        else
            return a.x < b.x;
    }
    return a.val < b.val;
}

void lee(int initi, int initj, int M[][101]){
    int c[2][101*101];
    int st, dr;
    st = dr = 1;
    c[0][1] = initi;
    c[1][1] = initj;
    M[initi][initj] = 1;
    while(st <= dr){
        int ic = c[0][st];
        int jc = c[1][st];
        ++st;
        for (int d = 0; d <= 7; ++d) {
            if(ic + di[d] >= 1 && ic + di[d] <= n && jc + dj[d] >= 1 && jc + dj[d] <= n && a[ic + di[d]][jc + dj[d]] != 'X' && M[ic + di[d]][jc + dj[d]] == 0){
                M[ic + di[d]][jc + dj[d]] = M[ic][jc] + 1;
                ++dr;
                c[0][dr] = ic + di[d];
                c[1][dr] = jc + dj[d];
            }
        }
    }

}

int main() {
    fin >> n >> m;
    getline(fin, s);
    for (int i = 1; i <= n; ++i) {
        getline(fin, s);
        for (int j = 1; j <= m; ++j) {
            a[i][j] = s[j-1];
            if(a[i][j] == 'R') {
                iR = i;
                jR = j;
            }
            if(a[i][j] == 'J'){
                iJ = i;
                jJ = j;
            }
        }
    }

    lee(iR, jR, R);
    lee(iJ, jJ, J);
    minim = 200000000;
    cnt = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if(R[i][j] == J[i][j] && R[i][j] != 0) {
                v[++cnt].val = R[i][j];
                v[cnt].x = i;
                v[cnt].y = j;
            }
        }
    }
    sort(v+1, v + cnt +1, cmp);
    fout << v[1].val << " " << v[1].x << " " << v[1].y;



    return 0;
}