Pagini recente » Cod sursa (job #2266023) | Cod sursa (job #495758) | Cod sursa (job #1149965) | Cod sursa (job #550274) | Cod sursa (job #2546877)
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct wow
{
int col, lin;
};
char c;
int n, m, i, j, x, y, a[101][101], b[101][101];
wow coada[10002], R, J;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
void bordare()
{
for(j = 0; j <= m+1; j++)
{
a[0][j] = a[n+1][j] = b[0][j] = b[n+1][j] = -1;
}
for(i = 1; i <= n; i++)
a[i][0] = a[i][m+1] = b[i][0] = b[i][m+1] = -1;
}
int main()
{
fin >> n >> m;
fin.get(c);
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
{
fin.get(c);
if(c == ' ')
{
a[i][j] = 0;
b[i][j] = 0;
}
else if(c == 'R')
{
a[i][j] = 1;
R.lin = i;
R.col = j;
}
else if(c == 'J')
{
b[i][j] = 1;
J.lin = i;
J.col = j;
}
else if(c == 'X')
{
a[i][j] = -1;
b[i][j] = -1;
}
}
fin.get(c);
}
bordare();
coada[1].lin = R.lin;
coada[1].col = R.col;
int st = 1, sf = 1;
while(st <= sf)
{
i = coada[st].lin;
j = coada[st].col;
for(int k = 0; k < 8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(a[x][y] == 0)
{
sf++;
coada[sf].lin = x;
coada[sf].col = y;
a[x][y] = a[i][j] + 1;
}
}
st++;
}
st = 1, sf = 1;
coada[1].lin = J.lin;
coada[1].col = J.col;
while(st <= sf)
{
i = coada[st].lin;
j = coada[st].col;
for(int k = 0; k < 8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(b[x][y] == 0)
{
sf++;
coada[sf].lin = x;
coada[sf].col = y;
b[x][y] = b[i][j] + 1;
}
}
st++;
}
int minim = 10002, xf, yf;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
{
if(a[i][j] == b[i][j] && a[i][j] < minim && a[i][j] > 0)
{
minim = a[i][j];
xf = i;
yf = j;
}
}
}
fout << minim << " " << xf << " " << yf;
return 0;
}