Pagini recente » Cod sursa (job #365807) | Cod sursa (job #738410) | Cod sursa (job #418160) | Cod sursa (job #2909687) | Cod sursa (job #2739429)
#include <fstream>
#include <iostream>
#include <queue>
#include <string>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct coord
{
int linie, col;
};
int n, m, mat1[105][105], mat2[105][105];
char litera;
queue<coord> coada;
coord Romeo;
coord Julieta;
coord punct_de_intalnire;
bool este_in_mat(int linie, int col)
{
return (1 <= linie && linie <= n && 1 <= col && col <= m);
}
void Lee(coord start, int mat_curent[105][105])
{
coada.push(start);
while (!coada.empty())
{
coord curent = coada.front();
coada.pop();
int dirLinie[8] = {-1, 0, 1, 0, -1, 1, 1, -1};
int dirCol[8] = {0, 1, 0, -1, -1, -1, 1, 1};
for (int i = 0; i < 8; i++)
{
coord vecin;
vecin.linie = curent.linie + dirLinie[i];
vecin.col = curent.col + dirCol[i];
if (mat_curent[vecin.linie][vecin.col] == 0 && este_in_mat(vecin.linie, vecin.col))
{
coada.push(vecin);
mat_curent[vecin.linie][vecin.col] = mat_curent[curent.linie][curent.col] + 1;
}
}
}
}
int main()
{
fin >> n >> m;
string rand;
getline(fin, rand);
for (int i = 1; i <= n; i++)
{
getline(fin, rand);
for (int j = 1; j <= m; j++)
{
litera = rand[j - 1];
if (litera == 'R')
{
mat1[i][j] = 1;
Romeo.linie = i;
Romeo.col = j;
}
else if (litera == 'J')
{
mat2[i][j] = 1;
Julieta.linie = i;
Julieta.col = j;
}
else if (litera == 'X')
{
mat1[i][j] = -1;
mat2[i][j] = -1;
}
}
}
Lee(Romeo, mat1);
Lee(Julieta, mat2);
int punct_de_intalnire_val = 100000;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
int casuta1 = mat1[i][j];
int casuta2 = mat2[i][j];
if ( casuta1 == casuta2 && casuta1 > 0 && casuta1 < punct_de_intalnire_val)
{
punct_de_intalnire_val = casuta1;
punct_de_intalnire.linie = i;
punct_de_intalnire.col = j;
}
}
}
fout << punct_de_intalnire_val << " " << punct_de_intalnire.linie << " " << punct_de_intalnire.col << "\n";
return 0;
}