Pagini recente » Cod sursa (job #2020711) | Cod sursa (job #3185083) | Cod sursa (job #1724572) | Cod sursa (job #2297732) | Cod sursa (job #1377534)
#include <iostream>
#include <cstring>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct element
{
int lin, col;
};
element q1[10004], q2[10005];
//char s[105][105]; nu avem nevoie
int n, m, a[105][105], b[105][105], dmin = 100005, xmin , ymin ;
const int di[] = {-1, 0, 1, -1 , -1, 0, 1, 1};
const int dj[] = {-1, -1, -1, 0, 1, 1 ,1 ,0};
int main()
{
int st1 = 0, dr1 = -1, st2 = 0, dr2 = -1;
fin >> n >> m; fin.get();
char c;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
c = fin.get();
if(c == 'X')
a[i][j] = -1, b[i][j] = -1;
else
if(c == 'R')
dr1++, q1[dr1].lin = i, q1[dr1].col = j, a[i][j] = 1;
else
if(c == 'J')
dr2++, q2[dr2].lin = i, q2[dr2].col = j, b[i][j] = 1;
else
if(c == ' ')
a[i][j] = 0, b[i][j] = 0;
if(fin.peek() == '\n')
fin.get();
}
while(st1 <= dr1)
{
int i = q1[st1].lin, j = q1[st1].col;
for(int k = 0; k < 8; k++)
{
int ii = i + di[k], jj = j + dj[k];
if(ii > 0 && ii <= n && jj > 0 && jj <= m && a[ii][jj] == 0)
{
a[ii][jj] = a[i][j] + 1;
dr1++;
q1[dr1].lin = ii;
q1[dr1].col = jj;
}
}
st1++;
}
while(st2 <= dr2)
{
int i = q2[st2].lin, j = q2[st2].col;
for(int k = 0; k < 8; k ++)
{
int ii = i + di[k], jj = j + dj[k];
if(ii > 0 && ii <= n && jj > 0 && jj <= m && b[ii][jj] == 0 )
{
b[ii][jj] = b[i][j] + 1;
dr2++;
q2[dr2].lin = ii;
q2[dr2].col = jj;
}
}
st2++;
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
if(a[i][j] == b[i][j] && a[i][j] > 0)
if(a[i][j] < dmin)
dmin = a[i][j], xmin = i, ymin = j;
}
fout<<dmin<<" "<<xmin<<" "<<ymin;
}