Pagini recente » Cod sursa (job #87257) | Cod sursa (job #2549877) | Cod sursa (job #3214150) | Cod sursa (job #1209560) | Cod sursa (job #2667825)
#include <fstream>
#define N 105
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int lr, cr, lj, cj;
int a[N][N], n, m;
int b[N][N];
int dl[8] = { 0,0,-1,1,-1,1,-1,1 };
int dc[8] = { -1,1,0,0,1,-1,-1,1 };
void Citire()
{
int i, j;
char s[102];
fin >> n >> m;
fin.get();
for (i = 1; i <= n; i++)
{
fin.getline(s, 102);
for (j = 0; j < m; j++)
{
if (s[j] == 'X')
a[i][j + 1] = b[i][j + 1] = -1;
if (s[j] == ' ')
a[i][j + 1] = b[i][j + 1] = 0;
if (s[j] == 'R')
{
lr = i;
cr = j + 1;
a[i][j + 1] = b[i][j + 1] = 0;
}
if (s[j] == 'J')
{
lj = i;
cj = j + 1;
a[i][j + 1] = b[i][j + 1] = 0;
}
}
}
}
void Bordare(int x[][N])
{
int i;
for (i = 0; i <= m + 1; i++) x[0][i] = x[n + 1][i] = -1;
for (i = 0; i <= n + 1; i++) x[i][0] = x[i][m + 1] = -1;
}
void Lee(int x[][N], int li, int ci)
{
int L[N * N], C[N * N], pr, ul;
int l, c, lv, cv, k;
x[li][ci] = 1;
L[1] = li, C[1] = ci; pr = ul = 1;
while (pr <= ul)
{
l = L[pr]; c = C[pr]; pr++;
for (k = 0; k < 8; k++)
{
lv = l + dl[k];
cv = c + dc[k];
if (x[lv][cv] == 0)
{
x[lv][cv] = x[l][c] + 1;
ul++; L[ul] = lv; C[ul] = cv;
}
}
}
}
void Rezolvare()
{
int i, j, imin, jmin, min = 10000000;
Citire();
Bordare(a);
Bordare(b);
Lee(a, lr, cr);
Lee(b, lj, cj);
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (a[i][j] == b[i][j] && a[i][j] > 0)
if (a[i][j] < min)
{
min = a[i][j];
imin = i;
jmin = j;
}
fout << min << " " << imin << " " << jmin;
}
int main()
{
Rezolvare();
return 0;
}