Cod sursa(job #2149591)

Utilizator AlexGAlexandru Gheorghe AlexG Data 2 martie 2018 19:16:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

struct Coordonate
{
    int x;
    int y;
};

struct Pozitie
{
    int continut;
    int distanta;
};

bool esteInMatrice(int n, int m, int x, int y)
{
    if(x<0 || y<0 || x>=n || y>=m)
        return false;
    return true;
}

int main()
{
    ifstream fin("rj.in");
    int n, m;
    fin >> n >> m;
    Pozitie matrice[n][m];
    fin.get();
    queue<Coordonate> coada;
    for(int i=0; i<n; i++)
    {
        char linie[m+1];
        fin.getline(linie, m+1);
        for(int j=0; j<m; j++)
        {
            if(j >= static_cast<int>(strlen(linie)))
                matrice[i][j].continut = 0;
            else
                switch(linie[j])
                {
                case ' ':
                    matrice[i][j].continut = 0;
                    break;
                case 'X':
                    matrice[i][j].continut = -1;
                    break;
                case 'R':
                    matrice[i][j].continut = 1;
                    matrice[i][j].distanta = 1;
                    coada.push({i, j});
                    break;
                case 'J':
                    matrice[i][j].continut = 2;
                    matrice[i][j].distanta = 1;
                    coada.push({i, j});
                    break;
                }
        }
    }
    ofstream fout("rj.out");
    while(!coada.empty())
    {
        Coordonate t = coada.front();
        for(int i=-1; i<=1; i++)
            for(int j=-1; j<=1; j++)
                if(esteInMatrice(n, m, t.x+i, t.y+j))
                {
                    if(matrice[t.x+i][t.y+j].continut + matrice[t.x][t.y].continut == 3)
                    {
                        fout << matrice[t.x][t.y].distanta+1 << ' ' << t.x+i+1 << ' ' << t.y+j+1;
                        return 0;
                    }
                    if(!matrice[t.x+i][t.y+j].continut)
                    {
                        coada.push({t.x+i, t.y+j});
                        matrice[t.x+i][t.y+j].continut = matrice[t.x][t.y].continut;
                        matrice[t.x+i][t.y+j].distanta = matrice[t.x][t.y].distanta+1;
                    }
                }
        coada.pop();
    }
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            cout << matrice[i][j].continut << ' ';
        cout << '\n';
    }
    return 0;
}