Cod sursa(job #2371050)

Utilizator rqresrares tamasanu rqres Data 6 martie 2019 15:22:05
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

queue < pair < int, int > > rom;
queue < pair < int, int > > jul;

int n, m;
int a[105][105];

int di[] = {-1, -1, 0, 1, 1,  1,  0, -1};
int dj[] = { 0,  1, 1, 1, 0, -1, -1, -1};
char c;

int startxr, startyr, startxj, startyj;
int stopx, stopy;

void Read()
{
    f >> n >> m;
    char linie[105];
    f.get();
    for(int i=1; i<=n; i++) {
        f.getline(linie,256);
        for(int j=0; j<=m-1; j++) {
            if(linie[j] == 'X') a[i][j+1] = -1;
            else if(linie[j] == 'R')  {a[i][j+1] = 1; startxr = i; startyr = j+1;}
            else if(linie[j] == 'J')  {a[i][j+1] = 2; startxj = i; startyj = j+1;}
            else if(linie[j]==' ') a[i][j+1] = 0;
        }
    }
}

bool ok(int i, int j)
{
    if(i<1 || j<1 || i>n || j>m)
        return false;
    if(a[i][j]==-1)
        return false;
    return true;
}

void Lee()
{
    int iRom, jRom, iJul, jJul;
    int iRomNext, jRomNext, iJulNext, jJulNext;
    rom.push(make_pair(startxr, startyr));
    jul.push(make_pair(startxj, startyj));

    while(!rom.empty() && !jul.empty()) {

        iRom = rom.front().first;
        jRom = rom.front().second;
        rom.pop();

        iJul = jul.front().first;
        jJul = jul.front().second;
        jul.pop();



        for(int dir = 0; dir < 8; dir++) {
            iRomNext = iRom + di[dir];
            jRomNext = jRom + dj[dir];
            iJulNext = iJul + di[dir];
            jJulNext = jJul + dj[dir];


            if(ok(iRomNext, jRomNext) && a[iRomNext][jRomNext] ==0) {
                a[iRomNext][jRomNext] = 1 + a[iRom][jRom];
                rom.push(make_pair(iRomNext, jRomNext));
                stopx=iRomNext; stopy=jRomNext;
            }

            if(ok(iJulNext, jJulNext) && a[iJulNext][jJulNext] ==0) {
                a[iJulNext][jJulNext] = 1 + a[iJul][jJul];
                jul.push(make_pair(iJulNext, jJulNext));
            }

        }

    }
}

int main()
{
    Read();
    Lee();
    cout << a[stopx][stopy] << ' ' << stopx << ' ' << stopy;
    return 0;
}