Mai intai trebuie sa te autentifici.

Cod sursa(job #2495792)

Utilizator Alexandru_GaloiuAlexandru Galoiu Alexandru_Galoiu Data 19 noiembrie 2019 20:31:59
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.26 kb
#include <iostream>
#include <fstream>
#include <string>
#include <queue>

std::ifstream fin("rj.in");
std::ofstream fout("rj.out");

int Map[128][128];
int n, m;
int romeoI, romeoJ, julietaI, julietaJ;
std::queue <std::pair < int, int > > Coada;
const int di[] = {0, 0, 1, -1, 1, 1, -1, -1};
const int dj[] = {1, -1, 0, 0, 1, -1, 1, -1};
int coord_i, coord_j, coord_timp;

bool OK(int x, int y)
{
if (x < 0 || y < 0 || x >= n | y >= m)
         return false;
if (Map[x][y] == -1)
         return false;
return true;
}

void LeeJulieta()
{
int i, j, iUrmator, jUrmator;
Map[julietaI][julietaJ] = 1;
Coada.push(std::make_pair(julietaI, romeoI));
while (!Coada.empty())
{
         i = Coada.front().first;
         j = Coada.front().second;
         Coada.pop();
         for (int directie = 0; directie < 8; directie++)
         {
                 iUrmator = i + di[directie];
                 jUrmator = j + di[directie];
                 if (OK(iUrmator, jUrmator) && Map[iUrmator][jUrmator] > 0)
                 {
                         if (Map[iUrmator][jUrmator] == Map[i][j] + 1)
                         {
                                 coord_i = iUrmator;
                                 coord_j = jUrmator;
                                 coord_timp = Map[iUrmator][jUrmator];
                         }
                         else
                         {
                                 Map[iUrmator][jUrmator] = Map[i][j] + 1;
                                 Coada.push(std::make_pair(iUrmator, jUrmator));
                         }
                 }
         }
}
}

void LeeRomeo()
{
int i, j, iUrmator, jUrmator;
Map[romeoI][romeoJ] = 1;
Coada.push(std::make_pair(romeoI, romeoJ));
while (!Coada.empty())
{
         i = Coada.front().first;
         j = Coada.front().second;
         Coada.pop();
         for (int directie = 0; directie < 8; directie++)
         {
                 iUrmator = i + di[directie];
                 jUrmator = j + di[directie];
                 if (OK(iUrmator, jUrmator) && Map[iUrmator][jUrmator] == 0)
                 {
                         Map[iUrmator][jUrmator] = Map[i][j] + 1;
                         Coada.push(std::make_pair(iUrmator, jUrmator));
                 }
         }
}
}

void Read()
{
fin >> n >> m;
std::string aux;
std::getline(fin, aux, '\n');
for (int i = 0; i < n; i++)
{
         std::getline(fin, aux, '\n');
         for (int j = 0; j < m; j++)
         {
                 if (aux[j] == 'R')
                 {

                         romeoI = i;
                         romeoJ = j;

                         Map[i][j] = 0;
                 }
                 else if (aux[j] == 'J')
                 {

                         julietaI = i;
                         julietaJ = j;

                         Map[i][j] = 0;
                 }
                 else if (aux[j] == 'X')
                 {
                         Map[i][j] = -1;
                 }
                 else
                         Map[i][j] = 0;
         }
}
}

void Afisare()
{
fout << coord_i << " " << coord_j << " " << coord_timp << "\n";
}

int main(int argc, char *argv[])
{
Read();
LeeRomeo();
LeeJulieta();
Afisare();
return 0;
}