Cod sursa(job #2501585)

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

using namespace std;

int m, n;
char a[110][110];
int b[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");

    short int di[8]= {-1,  0,  1, -1, 1, -1, 0, 1};
    short 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;
            if(a[i][j] == ' ')
                b[i][j] = 0;
            if(a[i][j] == 'R')
            {
                b[i][j] = 1;
                qr.push(elementMachen(i, j));
            }
            if(a[i][j] == 'J')
            {
                b[i][j] = 1;
                qj.push(elementMachen(i, j));
            }
        }

    while((!qr.empty() || !qj.empty()) && !gatabos)
    {
        int xc = qr.front().x;
        int yc = qr.front().y;
        qr.pop();
        kr = b[xc][yc];

        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)
            {
                b[xc+di[l]][yc+dj[l]] = kr+1;
                qr.push(elementMachen(xc+di[l], yc+dj[l]));
            }



        xc = qj.front().x;
        yc = qj.front().y;
        qj.pop();
        kj = b[xc][yc];

        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)
            {
                if(b[xc+di[l]][yc+dj[l]]==0)
                {
                    b[xc+di[l]][yc+dj[l]] = kr+1;
                    qj.push(elementMachen(xc+di[l], yc+dj[l]));
                }
                else
                {
                    if(b[xc+di[l]][yc+dj[l]]==(kj+1));
                    {
                        fout << xc+di[l]-1 << " " << yc+dj[l]+1 << " " << kj;
                        gatabos = true;
                        break;
                    }
                }
            }
    }
    /*cout << "\n\n\n";
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
            cout << b[i][j] << "   ";
        cout << "\n";
    }*/
    return 0;
}