Pagini recente » Cod sursa (job #1042504) | Cod sursa (job #2170130) | Cod sursa (job #153878) | Cod sursa (job #11358) | Cod sursa (job #2470881)
#include <fstream>
#include <queue>
int main()
{
std::ifstream in("rj.in");
std::ofstream out("rj.out");
const int LCMAX = 105;
int linii, coloane;
int romeo[LCMAX][LCMAX], julieta[LCMAX][LCMAX];
int romI, romJ;
int julI, julJ;
char caracterCitit;
std::queue<std::pair<int, int>> queueR, queueJ;
in >> linii >> coloane;
in >> std::noskipws >> caracterCitit;
for (int i = 0; i <= linii + 1; i++)
{
romeo[i][0] = julieta[i][0] = 9;
romeo[i][coloane + 1] = julieta[i][coloane + 1] = 9;
}
for (int j = 0; j <= coloane + 1; j++)
{
romeo[0][j] = julieta[0][j] = 9;
romeo[linii + 1][j] = julieta[linii + 1][j] = 9;
}
for (int i = 1; i <= linii; i++)
{
for (int j = 1; j <= coloane; j++)
{
in >> std::noskipws >> caracterCitit;
switch (caracterCitit)
{
case 'R':
romeo[i][j] = 1;
romI = i;
romJ = j;
break;
case 'J':
julieta[i][j] = 1;
julI = i;
julJ = j;
break;
case 'X':
romeo[i][j] = julieta[i][j] = 9;
default:
break;
}
}
in >> std::noskipws >> caracterCitit;
}
/*
for (int i = 0; i <= linii + 1; i++)
{
for (int j = 0; j <= coloane + 1; j++)
{
if (!romeo[i][j])
out << " ";
else
out << romeo[i][j];
}
out << '\n';
}
*/
int dirI[] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dirJ[] = {-1, 0, 1, 1, 1, 0, -1, -1};
queueR.push({romI, romJ});
queueJ.push({julI, julJ});
while (!queueR.empty())
{
int i = queueR.front().first;
int j = queueR.front().second;
for (int dir = 0; dir < 8; dir++)
{
int vI = i + dirI[dir];
int vJ = j + dirJ[dir];
if (!romeo[vI][vJ])
{
romeo[vI][vJ] = romeo[i][j] + 1;
queueR.push({vI, vJ});
}
}
queueR.pop();
}
while (!queueJ.empty())
{
int i = queueJ.front().first;
int j = queueJ.front().second;
for (int dir = 0; dir < 8; dir++)
{
int vI = i + dirI[dir];
int vJ = j + dirJ[dir];
if (!julieta[vI][vJ])
{
julieta[vI][vJ] = julieta[i][j] + 1;
queueJ.push({vI, vJ});
}
}
queueJ.pop();
}
int minim = romeo[julI][julJ] / 2 + 1;
out << minim;
in.close();
out.close();
}