Cod sursa(job #2694672)

Utilizator Maria-BorcaBorca Maria Maria-Borca Data 10 ianuarie 2021 13:12:35
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#include <limits.h>

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

const int di[] = {-1, -1, 0, 1, 1, 1, 0, -1}, dj[] = {0, 1, 1, 1, 0, -1, -1, -1};
int n, m, romeo[105][105], julieta[105][105], rx, ry, jx, jy;
char mat[105][105], line[105];

void citire() {
    fin.getline(line, 105);
    for (int i = 1; i <= n; i++) {
        fin.getline(line, 105);
        for (int j = 0; j < strlen(line); j++) {
            mat[i][j + 1] = line[j];
            if (mat[i][j + 1] == 'R') {
                rx = i;
                ry = j + 1;
            }
            if (mat[i][j + 1] == 'J') {
                jx = i;
                jy = j + 1;
            }
        }
    }
}

void fill_coada(int l, int c, int vizitat[][105]) {
    queue<pair<int, int>> q;
    vizitat[l][c] = 1;
    q.push(make_pair(l, c));
    while (!q.empty()) {
        int i = q.front().first, j = q.front().second;
        q.pop();
        for (int k = 0; k < 8; k ++) {
            int nl = i + di[k], nc = j + dj[k];
            if (mat[nl][nc] == ' ' && vizitat[nl][nc] == 0 && i >= 1 && i <= n && j >= 1 && j <= m) {
                vizitat[nl][nc] = vizitat[i][j] + 1;
                q.push(make_pair(nl, nc));
            }
        }
    }
}

void afisarev(int v[][105]) {
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++)
            cout << v[i][j] << ' ';
        cout << endl;
    }
}

int main() {
    int minn = INT_MAX, lm, cm;
    fin >> n >> m;
    citire();
    fill_coada(rx, ry, romeo);
    fill_coada(jx, jy, julieta);
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
            if (romeo[i][j] == julieta[i][j] && romeo[i][j] != 0)
                if (romeo[i][j] < minn)
                {
                    minn = romeo[i][j];
                    lm = i;
                    cm = j;
                }
    fout << minn << ' ' << lm << ' ' << cm;
    return 0;
}