Cod sursa(job #1805889)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 14 noiembrie 2016 17:00:39
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <bits/stdc++.h>

using namespace std;

char h[101][101];
int romeo[101][101];
int julieta[101][101];
int n, m;
struct abc{
    int x, y;
} coada[100000];
void rezolvare(int a[101][101], int x, int y){
    for (int i = 1; i <= n;i++)
        for (int j = 1; j <= m; j++){
            if (h[i][j] == 'X')
                a[i][j] = -1;
            if (h[i][j] == ' ' || h[i][j] =='R' || h[i][j] == 'J')
                a[i][j] = -2;
            }
    a[x][y] = 1;
    int p = 1;
    int u = 0;
    coada[1].x = x;
    coada[1].y = y;
    u++;
    while (p <= u){
    abc codita = coada[p];
    p++;
        for (int dx = -1; dx <= 1; dx++)
            for (int dy = -1; dy <= 1; dy++)
                if (a[codita.x + dx][codita.y + dy] == -2){
                    coada[++u].x = codita.x + dx;
                    coada[u].y = codita.y + dy;
                    a[codita.x + dx][codita.y + dy] = a[codita.x][codita.y] + 1;
                 }
    }
}

int main()
{
    ifstream fin ("rj.in");
    ofstream fout ("rj.out");
    fin >> n >> m;
    fin.getline(h[0], m + 1);
    for (int i = 1; i <= n; i++)
        fin.getline(h[i] + 1, m + 1);
    int rx, ry, jx, jy;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++){
            if (h[i][j] == 'R'){
                rx = i;
                ry = j;
            }
            if (h[i][j] == 'J'){
                jx = i;
                jy = j;
            }
        }
        rezolvare (romeo, rx, ry);
        rezolvare (julieta, jx, jy);
        int x, y, t = n * m;
        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] < t){
                        t = romeo[i][j];
                        x = i;
                        y = j;
                    }
            }
    fout << t << " " << x << " " << y << "\n";
    return 0;
}