Pagini recente » Cod sursa (job #1611279) | Cod sursa (job #2651331) | Monitorul de evaluare | Cod sursa (job #1808148) | Cod sursa (job #2359058)
#include <fstream>
#include <queue>
using namespace std;
ifstream f1("rj.in");
ofstream f2("rj.out");
int di[] = {1, -1, 0, 0, -1, -1, 1, 1};
int dj[] = {0, 0, 1, -1, 1, -1, 1, -1};
int v[101][101],x[101][101],n,m;
int ri,rj,ji,jj,soli = 1,solj = 1;
char l[101];
queue<pair<int,int> > coada;
queue<pair<int,int> > coada2;
void citire()
{
f1>> n >> m;
f1.get();
for(int i = 1; i <= n; i++)
{
f1.getline(l, 102);
for(int j = 0; j < m; j++)
{
if(l[j] == 'R')
{
ri = i;
rj = j + 1;
}
else if(l[j] == 'J')
{
ji = i;
jj = j +1;
}
else if(l[j] == 'X')
{
v[i][j + 1] = -1;
x[i][j + 1] = -1;
}
}
}
}
bool ok(int i, int j)
{
if(i < 1 || j < 1 || i > n|| j > n)
return false;
if(v[i][j] == -1)
return false;
return true;
}
void lee(int v[101][101],int starti,int startj)
{
int i,j,i_urma,j_urma;
v[starti][startj] = 1;
coada.push(make_pair(starti,startj));
while((!coada.empty()))
{
i = coada.front().first;
j = coada.front().second;
coada.pop();
for(int dir = 0; dir < 8; ++dir)
{
i_urma = i + di[dir];
j_urma = j + dj[dir];
if(ok(i_urma,j_urma) && v[i_urma][j_urma] < 1)
{
v[i_urma][j_urma] = v[i][j] + 1;
coada.push(make_pair(i_urma,j_urma));
}
}
}
}
int main()
{
citire();
lee(v,ri,rj);
lee(x,ji,jj);
// for(int i = 1; i <= n; ++i)
// {
// for(int j = 1; j <= m; ++j)
// f2 << v[i][j] << ' ';
// f2 << '\n';
// }
int tmin = 102*102 ;
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= m; ++j)
if(v[i][j] == x[i][j] && v[i][j] > 0 && tmin > x[i][j])
soli = i, solj = j, tmin = v[i][j];
}
f2 << tmin << ' '<< soli << ' ' << solj;
return 0;
}