Pagini recente » Cod sursa (job #27946) | Cod sursa (job #830000) | Cod sursa (job #800080) | Cod sursa (job #1123672) | Cod sursa (job #3342864)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int n, m, A[102][102], B[102][102],
dx[] = {1, -1, 0, 0, 1, 1, -1, -1},
dy[] = {0, 0, 1, -1, 1, -1, -1, 1};
ifstream f("rj.in");
ofstream g("rj.out");
struct po
{
int x, y;
};
po r, ji;
void citire()
{
char c;
f >> n >> m;
f.get();
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')
{
r = {i, j};
}
else
if(c == 'J')
{
ji = {i, j};
}
}
f.get();
}
}
void bordare()
{
for(int j = 0; j <= m + 1; j++)
A[0][j] = A[n + 1][j] = B[0][j] = B[n + 1][j] = -1;
for(int i = 1; i <= n; i++)
A[i][0] = A[i][m + 1] = B[i][0] = B[i][m + 1] = -1;
}
void lee(po xy, int C[102][102])
{
queue<po>Q;
Q.push(xy);
C[xy.x][xy.y] = 1;
po vec, crt;
while(!Q.empty())
{
crt = Q.front();
Q.pop();
for(int k = 0; k < 8; k++)
{
vec.x = crt.x + dx[k];
vec.y = crt.y + dy[k];
if(C[vec.x][vec.y] == 0)
{
C[vec.x][vec.y] = C[crt.x][crt.y] + 1;
Q.push(vec);
}
}
}
}
int main()
{
citire();
bordare();
lee(r, A);
lee(ji, B);
po minn = {1000, 1000};
int minn1 = 1000;
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] < minn1)
{
minn1 = A[i][j];
minn = {i, j};
}
}
}
}
g << minn1 << ' ' << minn.x << ' ' << minn.y;
return 0;
}