Cod sursa(job #2501594)

Utilizator andreigaliAndrei Galitianu andreigali Data 29 noiembrie 2019 23:10:29
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.8 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>

using namespace std;

int m, n;
char a[110][110];
int b[110][110];
int c[110][110];

struct coord
{
    int x;
    int y;
};

coord elementMachen(int x, int y)
{
    coord aux;
    aux.x = x;
    aux.y = y;
    return aux;
}

queue<coord> qr, qj;

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

    int di[8]= {-1,  0,  1, -1, 1, -1, 0, 1};
    int dj[8]= {-1, -1, -1,  0, 0,  1, 1, 1};
    int kr, kj;
    bool gatabos = false;

    fin >> n >> m;
    fin.get();

    for(int i=0; i<n; i++)
        fin.getline(a[i], 111);

    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
        {
            if(a[i][j] == 'X')
            {
                b[i][j] = -10;
                c[i][j] = -10;
            }
            if(a[i][j] == ' ')
            {
                b[i][j] = 0;
                c[i][j] = 0;
            }
            if(a[i][j] == 'R')
            {
                b[i][j] = 1;
                qr.push(elementMachen(i, j));
            }
            if(a[i][j] == 'J')
            {
                c[i][j] = 1;
                qj.push(elementMachen(i, j));
            }
        }

    while((!qr.empty() && !qj.empty()) && !gatabos)
    {
        int xc = qr.front().x;
        int yc = qr.front().y;
        int xcc = qj.front().x;
        int ycc = qj.front().y;

        qr.pop();
        qj.pop();

        kr = b[xc][yc];
        kj = c[xcc][ycc];

        for(int l=0; l<8; l++)
        {
            if(0<=xc+di[l] && xc+di[l]<n && 0<=yc+dj[l] && yc+dj[l]<m && b[xc+di[l]][yc+dj[l]]==0)
            {
                cout << "R: " << xc+di[l] << " " << yc+dj[l] << "\n";
                b[xc+di[l]][yc+dj[l]] = kr+1;
                qr.push(elementMachen(xc+di[l], yc+dj[l]));
            }
            if(0<=xcc+di[l] && xcc+di[l]<n && 0<=ycc+dj[l] && ycc+dj[l]<m && c[xcc+di[l]][ycc+dj[l]]==0)
            {
                cout << "J: " << xcc+di[l] << " " << ycc+dj[l] << "\n";
                c[xcc+di[l]][ycc+dj[l]] = kj+1;
                qj.push(elementMachen(xcc+di[l], ycc+dj[l]));
            }
        }


    }

    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            if(b[i][j] == c[i][j] && b[i][j] != -10 && b[i][j] != 0)
            {
                fout << b[i][j] << " " << i+1 << " " << j+1;
                return 0;
            }
    }
    /*
    cout << "\n\n\n";
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            cout << b[i][j] << "   ";
        cout << "\n";
    }
    cout << "\n\n\n";
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            cout << c[i][j] << "   ";
        cout << "\n";
    }*/
    return 0;
}