Pagini recente » Cod sursa (job #2840531) | Cod sursa (job #2998940) | Profil florinhaja | Cod sursa (job #2428958) | Cod sursa (job #1164964)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int dl[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
const int dc[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
typedef struct { int x,y; } cop;
int n,m,rx,ry,jx,jy,A[109][109],B[109][109];
queue < cop > R,J;
char c;
inline void Read_Data()
{
f >> n >> m;
f.get(c);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
f.get(c);
if(c == 'X') A[i][j] = B[i][j] = 1;
else if(c == 'R') rx = i, ry = j, A[i][j] = B[i][j] = 1;
else if(c == 'J') jx = i, jy = j, A[i][j] = B[i][j] = 1;
}
f.get(c);
}
for(int i=0; i<=n+1; i++) A[i][0] = A[i][m+1] = B[i][0] = B[i][m+1] = 1;
for(int j=0; j<=m+1; j++) A[0][j] = A[n+1][j] = B[0][j] = B[n+1][j] = 1;
}
inline void Solve()
{
int l,c,ll,cc;
cop aux;
aux.x = rx;
aux.y = ry;
R.push(aux);
while(!R.empty())
{
l = R.front().x;
c = R.front().y;
R.pop();
for(int k=0; k<=7; k++)
{
ll = l + dl[k];
cc = c + dc[k];
if(A[ll][cc] == 0)
{
A[ll][cc] = A[l][c] + 1;
aux.x = ll;
aux.y = cc;
R.push(aux);
}
}
}
aux.x = jx;
aux.y = jy;
J.push(aux);
while(!J.empty())
{
l = J.front().x;
c = J.front().y;
J.pop();
for(int k=0; k<=7; k++)
{
ll = l + dl[k];
cc = c + dc[k];
if(B[ll][cc] == 0)
{
B[ll][cc] = B[l][c] + 1;
aux.x = ll;
aux.y = cc;
J.push(aux);
}
}
}
int minim = 232556544, sol1, sol2;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(A[i][j] == B[i][j] && A[i][j] < minim && A[i][j] > 1) minim = A[i][j], sol1 = i, sol2 = j;
}
}
g << minim << " " << sol1 << " " << sol2 << '\n';
}
int main()
{
Read_Data();
Solve();
g.close();
return 0;
}