Pagini recente » Cod sursa (job #1225548) | Cod sursa (job #665843) | Monitorul de evaluare | Cod sursa (job #1504047) | Cod sursa (job #2164087)
#include <fstream>
#define INF 1500000000
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,ir,jr,ij,jj,a[105][105],b[105][105],c[2][22050];
int isol,jsol,minim,p,u;
char ch[102];
int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[] = {-1, 0 , 1, -1, 1, -1, 0, 1};
int main()
{
fin >> n >> m;
fin.get();
for (i=1; i<=n; i++)
{
fin.getline(ch, 101);
for (j=0; ch[j]!=0; j++)
{
if (ch[j] == 'R')
{
ir = i;
jr = j+1;
}
if (ch[j] == 'J')
{
ij = i;
jj = j+1;
}
if (ch[j] == 'X')
{
a[i][j+1] = -1;
b[i][j+1] = -1;
}
}
}
///R
c[0][1] = ir;
c[1][1] = jr;
p = u = 1;
a[ir][jr] = 1;
while (p <= u)
{
int ic = c[0][p];
int jc = c[1][p];
for (int dir=0; dir<=7; dir++)
{
int iv = ic+dx[dir];
int jv = jc+dy[dir];
if (iv >= 1 && jv >= 1 && iv <= n && jv <= m && a[iv][jv] == 0)
{
c[0][++u] = iv;
c[1][u] = jv;
a[iv][jv] = a[ic][jc]+1;
}
}
p++;
}
///J
c[0][1] = ij;
c[1][1] = jj;
p = u = 1;
b[ij][jj] = 1;
while (p <= u)
{
int ic = c[0][p];
int jc = c[1][p];
for (int dir=0; dir<=7; dir++)
{
int iv = ic+dx[dir];
int jv = jc+dy[dir];
if (iv >= 1 && jv >= 1 && iv <= n && jv <= m && b[iv][jv] == 0)
{
c[0][++u] = iv;
c[1][u] = jv;
b[iv][jv] = b[ic][jc]+1;
}
}
p++;
}
minim = INF;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (a[i][j] == b[i][j] && a[i][j] > 0 && a[i][j] < minim)
{
minim = a[i][j];
isol = i;
jsol = j;
}
fout << minim << " " << isol << " " << jsol;
return 0;
}