Pagini recente » Cod sursa (job #2813069) | Cod sursa (job #2794869) | Rotatie lexicografic minima | Cod sursa (job #2571285) | Cod sursa (job #2989061)
#include <fstream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct coord{
int lin, col;
};
int n, m;
int romeo[101][101];
int julieta[101][101];
coord jul;
coord rom;
coord intalnire;
queue < coord > q;
string s;
int dir[8][2] = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};
bool in_mat(coord a)
{
return a.lin >= 1 && a.lin <= n && a.col >= 1 && a.col <= m;
}
void lee(int v[][101], coord st)
{
v[st.lin][st.col] = 1;
q.push(st);
while(!q.empty())
{
coord cur = q.front();
q.pop();
coord vecin;
for(int d = 0; d < 8; d++)
{
vecin.lin = cur.lin + dir[d][0];
vecin.col = cur.col + dir[d][1];
if(in_mat(vecin) && v[vecin.lin][vecin.col] == 0)
{
q.push(vecin);
v[vecin.lin][vecin.col] = v[cur.lin][cur.col] + 1;
}
}
}
}
int main()
{
int minim = 10000;
cin >> n >> m;
getline(cin, s);
for(int i = 1; i <= n; i++)
{
getline(cin, s);
for(int j = 0; j < m; j++)
{
if(s[j] == 'R')
{
rom.lin = i;
rom.col = j + 1;
}
else if(s[j] == 'J')
{
jul.lin = i;
jul.col = j + 1;
}
else if(s[j] == 'X')
{
romeo[i][j + 1] = -1;
julieta[i][j + 1] = -1;
}
}
s.clear();
}
lee(romeo, rom);
lee(julieta, jul);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(romeo[i][j] == julieta[i][j] && romeo[i][j] < minim && romeo[i][j] != -1 && romeo[i][j] != 0)
{
minim = romeo[i][j];
intalnire.lin = i;
intalnire.col = j;
}
}
}
cout << minim << " " << intalnire.lin << " " << intalnire.col;
return 0;
}