Mai intai trebuie sa te autentifici.
Cod sursa(job #2495792)
Utilizator | 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;
}