Pagini recente » Cod sursa (job #997469) | Cod sursa (job #1437444) | Cod sursa (job #898565) | Cod sursa (job #636348) | Cod sursa (job #3157185)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin ("rj.in");
ofstream cout ("rj.out");
const short directie[2][8] = {{-1 , -1 , -1 , 0 , 0 , 1 , 1 , 1} , {-1 , 0 , 1 , -1 , 1 , -1 , 0 , 1}};
int durata[2][101][101];
void Lee (pair <int , int> inceput , int linii , int coloane , int matrice[][101])
{
auto Inside = [&] (const int linie , const int coloana) -> bool
{ return 1 <= linie && linie <= linii && 1 <= coloana && coloana <= coloane; };
queue < pair <int , int> > coordonate; coordonate.push(inceput);
while (!coordonate.empty())
{
const int linie_1 = coordonate.front().first , coloana_1 = coordonate.front().second;
for (int indice = 0 ; indice < 8 ; indice++)
{
const int linie_2 = linie_1 + directie[0][indice] , coloana_2 = coloana_1 + directie[1][indice];
if (Inside(linie_2 , coloana_2) && !matrice[linie_2][coloana_2])
{ matrice[linie_2][coloana_2] = matrice[linie_1][coloana_1] + 1; coordonate.push(make_pair(linie_2 , coloana_2)); }
}
coordonate.pop();
}
}
int main ()
{
int linii , coloane;
cin >> linii >> coloane;
char sir[101];
cin.getline(NULL , 0);
pair <int , int> inceput[2];
for (int linie = 1 ; linie <= linii ; linie++)
{
cin.getline(sir , coloane + 1);
for (int coloana = 1 ; coloana <= coloane ; coloana++)
switch (sir[coloana - 1])
{
case 'X': durata[0][linie][coloana] = durata[1][linie][coloana] = -1; break;
case 'R': { inceput[0] = make_pair(linie , coloana); durata[0][linie][coloana] = 1; } break;
case 'J': { inceput[1] = make_pair(linie , coloana); durata[1][linie][coloana] = 1; } break;
}
}
Lee(inceput[0] , linii , coloane , durata[0]);
Lee(inceput[1] , linii , coloane , durata[1]);
int minim = 2e9;
pair <int , int> coordonate;
for (int linie = 1 ; linie <= linii ; linie++)
for (int coloana = 1 ; coloana <= coloane ; coloana++)
if (durata[0][linie][coloana] == durata[1][linie][coloana] && 0 < durata[0][linie][coloana] && durata[0][linie][coloana] < minim)
{ minim = durata[0][linie][coloana]; coordonate = make_pair(linie , coloana); }
cout << minim << ' ' << coordonate.first << ' ' << coordonate.second;
cout.close(); cin.close();
return 0;
}