Pagini recente » Cod sursa (job #2330752) | Cod sursa (job #2722646) | Cod sursa (job #2601867) | Cod sursa (job #2577302) | Cod sursa (job #2359051)
#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,solj;
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 i,j,i_urma,j_urma;
int i2,j2,i_urma2,j_urma2;
v[ri][rj] = 1;
coada.push(make_pair(ri,rj));
x[ji][jj] = 1;
coada2.push(make_pair(ji,jj));
while((!coada.empty()) && (!coada2.empty()))
{
i = coada.front().first;
j = coada.front().second;
coada.pop();
i2 = coada2.front().first;
j2 = coada2.front().second;
coada2.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));
}
i_urma2 = i2 + di[dir];
j_urma2 = j2 + dj[dir];
if(ok(i_urma2,j_urma2) && x[i_urma2][j_urma2] < 1)
{
x[i_urma2][j_urma2] = x[i2][j2] + 1;
coada2.push(make_pair(i_urma2,j_urma2));
}
}
}
}
int main()
{
citire();
lee();
// 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;
}